simfatic / formhandler
PHP的基本通用表单处理器
1.1.3
2021-11-05 10:45 UTC
Requires
- phpmailer/phpmailer: ^6.5
- simfatic/boar: dev-main
Requires (Dev)
- phpunit/phpunit: ^9.5
README
此软件包可用于创建简单的PHP脚本,用于处理表单提交。目前,此PHP表单处理器可以进行验证、处理验证码、发送表单电子邮件以及处理文件附件。
简单用法
use Simfatic\FormHandler\FormHandler; $fh = new FormHandler(); $fh->validate(function($validator) { $validator->field('name')->isRequired(); $validator->field('email')->isEmail()->isRequired(); })->sendEmailTo('someone@website.com'); echo $fh->process($_POST);
表单验证使用Simfatic\Boar完成。因此,任何自定义都可以放在验证回调中。
自定义邮件发送器
FormHandler使用PHPMailer。选项可以像这样自定义。
use Simfatic\FormHandler\FormHandler; $fh = new FormHandler(); $fh->validate(function($validator) { $validator->field('name')->isRequired(); $validator->field('email')->isEmail()->isRequired(); })->configMailer(function($mailer) { $mailer->setFrom('someone@yourwebsite.com','Form',false); $mailer->isSMTP(); // Send using SMTP $mailer->Host = 'smtp.example.com'; // Set the SMTP server to send through $mailer->SMTPAuth = true; // Enable SMTP authentication $mailer->Username = 'user@example.com'; // SMTP username $mailer->Password = 'secret'; // SMTP password $mailer->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged $mailer->Port = 587; /* Example: adding Cc $mail->addCC('cc@example.com'); */ })->sendEmailTo('someone@gmail.com'); echo $fh->process($_POST);
文件附件
调用attachFiles,传递文件上传字段的名称。
$fh = new FormHandler(); $fh->validate(function($validator) { $validator->field('name')->isRequired(); $validator->field('email')->isEmail()->isRequired(); })->attachFiles(['image']) ->sendEmailTo('someone@gmail.com');
ReCaptcha v2
为了显示“我不是机器人”复选框,在您的表单中创建一个div,如下所示:
<div class="g-recaptcha" data-sitekey="xxxxxxxxxxx"></div>
然后更新处理器
use Simfatic\FormHandler\FormHandler; $pp = new FormHandler(); $pp->validate(function($validator) { $validator->field('name')->isRequired(); $validator->field('email')->isEmail()->isRequired(); }) ->requireReCaptcha(function($recaptcha) { $recaptcha->initSecretKey('xxxxxx'); }) ->configMailer(function($mailer) { $mailer->setFrom('someone@form.guide','Form',false); }) ->sendEmailTo('someone@gmail.com'); echo $pp->process($_POST);
在示例文件夹中查看完整的示例。
客户端处理
您可以直接在表单的action属性中提供自定义handler.php的链接。
另一个选择是使用JavaScript处理表单的响应。process()函数的响应是JSON。以下是一个示例。此示例使用jQuery。
$(function() { $('#contact_form').submit(function(e) { e.preventDefault(); $.post( 'handler.php', $('form#contact_form').serialize(), function(data) { if(data.result == 'success') { $('form#contact_form').hide(); $('#success_message').show(); } else { $('#error_message').append('<ul></ul>') jQuery.each(data.errors,function(key,val) { $('#error_message ul').append('<li>'+key+':'+val+'</li>'); }); $('#error_message').show(); } },'json'); }); });