2011-06-02 175 views
3

我正在为Kohana开发授权系统。我这样做只是为了教育...验证错误消息

这是怎么看我的控制器,检查提交的领域:

$validation = 
    Validation::factory($_POST) 
    ->rule('username', 'not_empty') 
    ->rule('username', 'max_length', array(':value', 32)) 
    ->rule('username', 'alpha_dash', array(':value', true)) 
    ->rule('password', 'not_empty') 
    ->rule('password', 'min_length', array(':value', 6)) 
    ->rule('password', 'max_length', array(':value', 255)) 
    ->rule('passwordRepeatedly', 'not_empty') 
    ->rule('passwordRepeatedly', 'matches', array(':validation', 'passwordRepeatedly', 'password')) 
    ->rule('email', 'not_empty') 
    ->rule('email', 'email'); 

我在寻找对每个增加的规则显示不同的错误信息的方式。我的目标是通过它(一个或全部(如果发生))在那里查看并显示它们。

伪代码:

errorFor('username', 'not_empty') => 'Username is required! Try again...'; 

如何定义不同的错误为每个规则?我无法找到的文档的任何理解我...

+0

与应用规则相同的方式只是将错误字符串或数组与您应用验证的规则相关联,将错误作为例外抛出或返回其值 – 2011-06-02 16:29:05

+0

您能给我举个例子吗? – daGrevis 2011-06-02 16:34:39

回答

2

您有:

$validation = ... 

所以,首先你应该检查一下变数通过验证:

if($validation->check()) 
{ 
    // no errors 
} 
else 
{ 
    $errors = $validation->errors('user'); 
} 

那么你应该有user.php的文件应用程序/消息

<?php defined('SYSPATH') or die('No direct script access.'); 

    return array 
    (
    'input_name' => array 
    (
     'rule' => 'your message', 
     'default' => 'default message' 
    ), 
    'username' => array 
    (
     'not_empty' => 'your message', 
     'max_length' => 'your message', 
     'alpha_dash' => 'your message', 
     'default' => 'default message' 
    ), 

); 

?> 

要显示的错误:

foreach($errors as $input_field => $message) 
    echo $message; 
0

验证规则使用消息文件夹的应用程序目录中。

选中此项:http://kohanaframework.org/3.1/guide/orm/examples/validation查看完整验证示例,其中消息文件位于页面的最底部。

需要注意的是目录文件名的消息文件。

在KO3.1(我相信),如果失败,Validation会抛出异常。如果您使用catch (ORM_Validation_Exception $e)来捕获它,则可以使用$e->errors('some_directory')捕获错误消息,然后以阵列的形式从messages/some_directory/model_name.php中提取错误消息,就像上面链接的示例中一样。