makechtec/form-dispatcher

发送邮件,存储到数据库和闪存会话数据

安装: 9

依赖: 0

建议: 0

安全性: 0

星级: 0

关注者: 2

分支: 0

类型:模板

1.1.0 2021-11-21 07:22 UTC

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 库几乎相同的方法,但进行了一些修改,以便还可以链式调用错误和成功的回调。