2012-11-16 72 views
2

我一直在使用Respect Validation表单验证如何从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 

究竟应该如何使用Respect Validation完成

+0

我并不积极,但我认为这与[已知错误](https://github.com/Respect/Validation/issues/86)有关。 –

回答

4

邮件存在,但您的findMessages查找正在搜索notEmptyemail

你确实有在$errors是什么:

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

$errors[0]是您notEmpty查找它没有被发现。
$errors[1]是你找到的email找到的。

如果你改变它来寻找问题nameemailmessage领域:

$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 issue tracker提供支持,您会发现更快的结果。这也是您可能需要改进的任何建议的理想平台,以帮助您避免遇到的问题。你会发现尊敬团队热切,友善,并随时愿意提供帮助。

nJoy!

0

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

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