2012-11-16 95 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' 
));