makechtec / form-dispatcher
发送邮件,存储到数据库和闪存会话数据
1.1.0
2021-11-21 07:22 UTC
Requires
- google/recaptcha: ^1.2
- nette/database: ^3.1
- swiftmailer/swiftmailer: ^6.0
- symfony/dotenv: ^5.3
- twig/twig: ^3.3
This package is auto-updated.
Last update: 2024-09-21 13:27:38 UTC
README
表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Example form</title>
</head>
<body>
<form action="dispatcher.php" method="post">
<input type="text" name="name" id="" value="<?php dold('name') ?>">
<input type="email" name="email" id="" value="<?php dold('email') ?>">
<button type="submit">Submit</button>
</form>
<?php if(session('success')){ ?>
<script>
alert("<?php echo(session('message')); ?>");
</script>
<?php } else if(session('error')) { ?>
<script>
alert("<?php echo(session('message')); ?>");
</script>
<?php } ?>
</body>
</html>
注意:由于这样可以访问到函数 session(),该函数允许我们访问在分发器中放置的会话变量,无论是为了恢复错误还是其他消息,此外还有函数 dold(),该函数用于恢复表单字段并防止它们为空。这个函数调用了 echo(),因此如果只想获取值,应该调用 old()。
分发器
<?php
use Facades\Mail;
use Facades\Database;
use Facades\Session;
use Facades\Template;
use Facades\ReCaptcha;
require_once(__DIR__ .'/../vendor/autoload.php');
Session::saveOlds();
try{
$recaptcha = ReCaptcha::default()
->error(function(){
throw new \Exception("Error ReCaptcha", 1);
})
->check($_POST['input_recaptcha'], $_SERVER['REMOTE_ADDR']);
$responseHTML = Template::render('mail.php', [ 'email' => $_POST['email'] ]);
Mail::default("Mensaje de prueba")
->setTo($_POST['email'])
->setBody($responseHTML, 'text/html')
->send();
Database::default()
->setTable('records')
->insert([
'name' => $_POST['name'],
'email' => $_POST['email']
]);
}
catch(\Exception $e){
session('error', true);
session('message', 'Ha ocurrido un error');
back();
}
session('success', true);
session('message', 'exito');
back();
使用门面,如 Mail,该门面返回一个继承自 Swift_Mailer 的对象,因此可以查看相应的文档 AQUI。
对于 Template 门面,有一个静态方法,用于通过传递一个关联数组来获取文件内容,就像 Laravel 的 view() 函数。
对于 Database,使用以下库 Nette Database。
对于 Session 门面,文档尚未完成。
对于 Template,使用 Symfony 的 Twig 引擎,因此可以查看其文档 AQUI。
对于 ReCaptcha,使用与 Google ReCaptcha 库几乎相同的方法,但进行了一些修改,以便还可以链式调用错误和成功的回调。