3

我一直在使用Respect Validation进行表单验证

$app->post('/', function () use ($app) {

    $validator  = v::key('name', v::string()->notEmpty())
                    ->key('email', v::email()->notEmpty())
                    ->key('message', v::string()->notEmpty());

    $errors = array();

    try{
        $validator->assert($_POST);
    } catch (\InvalidArgumentException $e) {
        $errors = $e->findMessages(array(
            'notEmpty'     => '{{name}} is required',
            'email'        => '{{name}} must be a valid email'
        ));
    }

    if ($validator->validate($_POST)) {
        // do stuff

        $app->redirect('/');

    } else {

        $app->render('index.php', array('field_errors' => array_values($errors)));

    }
});

循环通过array_values($errors)会给我:

"" is required
email must be a valid email

我需要类似的东西:

name is required
email must be a valid email
message is required

应该如何使用尊重验证来完成

4

2 回答 2

4

消息在那里,但您的findMessages查找正在搜索notEmptyand email

你实际拥有的$errors是:

Array
(
    [0] => 
    [1] => email must be a valid email
)

$errors[0]是您notEmpty未找到的查找。
$errors[1]是您找到的查找email

如果您更改它以查找有问题的字段nameemail并且message

    $errors = $e->findMessages(array(
        'name'         => '{{name}} is required',
        'email'        => '{{name}} must be a valid email',
        'message'      => '{{name}} is required'
    ));

然后你会得到想要的结果:

Array
(
    [0] => name is required
    [1] => email must be a valid email
    [2] => message is required
)

请原谅我纯粹偶然发现的延迟响应,如果改为从官方Respect\Validation 问题跟踪器请求支持,您会发现更快的结果。这也是您可能提出的任何改进建议的理想平台,以帮助避免您遇到的问题。您会发现 Respect 团队热心、友好并且总是乐于提供帮助。

开心!

于 2013-01-08T17:44:07.467 回答
0

我认为上面的答案两个很接近。您只需要添加一个包含消息以及名称和电子邮件的错误消息代码块。

 $errors = $e->findMessages(array(
    'notEmpty'     => '{{name}} is required',
    'email'        => '{{email}} must be a valid email',
    'notEmpty'     => '{{message}} please enter a message'
)); 
于 2013-03-13T01:42:31.623 回答