Cakephp中的控制器验证

Cakephp中的控制器验证,cakephp,cakephp-2.3,Cakephp,Cakephp 2.3,我希望在cakephp中的控制器中进行验证。虽然我的验证在模型中运行良好,但我希望在控制器中也验证它,而不是模型 我在contrller中验证了我所做的 $validates = array('email' => array( 'required' => array( 'rule' => array('notEmpty'), 'messag

我希望在cakephp中的控制器中进行验证。虽然我的验证在模型中运行良好,但我希望在控制器中也验证它,而不是模型

我在contrller中验证了我所做的

  $validates = array('email' => array(
                    'required' => array(
                        'rule' => array('notEmpty'),
                        'message' => 'A email is required'
                    ),
                    'isUnique' => array(
                        'rule' => array('notEmpty'),
                        'message' => 'This email is already registered'
                    ),
                    'email' => array(
                        'rule' => array('email'),
                        'message' => 'Enter valid mail address'
                    )
            ));
            if ($this->User->validates($validates)) {
                die("Action can be performed as validated !! Fields are correct");
            } else {
                die("Action can't be performed  !! Fields are in-correct");
            }
不管字段是否正确,它总是以正确的状态结束我。请帮助编辑您的代码:

$this->$Model->validate = array('email' => array(
                    'required' => array(
                        'rule' => array('notEmpty'),
                        'message' => 'A email is required'
                    ),
                    'isUnique' => array(
                        'rule' => array('notEmpty'),
                        'message' => 'This email is already registered'
                    ),
                    'email' => array(
                        'rule' => array('email'),
                        'message' => 'Enter valid mail address'
                    )
            ));

它与我一起工作:)

设置$this->Model->validates=$validates;将按照前面答案中的建议为您工作,但您可能会覆盖模型中可能设置的所有其他验证规则。最好是动态添加、修改和删除验证规则,如下所示:

$this->Model->validator()
    ->add('email', 'required', array(
        'rule' => array('notEmpty'),
        'message' => 'A email is required'
    ))
    ->add('email', 'isUnique', array(
        'rule' => array('notEmpty'),
        'message' => 'This email is already registered'
    ))
    ->add('email', 'email', array(
        'rule' => array('email'),
        'message' => 'Enter valid mail address'
    ));
我留下的数组与您呈现的完全相同,但是我认为您在isUnique上的规则是错误的

您可以在此处阅读有关绑定规则的更多信息:

尝试以下操作-

$data = $this->request->data;
$this->ModelName->set($data);

if ($this->ModelName->validates()) {
    // it validated logic
} else {
    // didn't validate logic
    $errors = $this->ModelName->validationErrors;
}
假设您要验证cakephp控制器中的特定字段,则将使用以下代码-

$this->ModelName->validationErrors['html_field_name'][] = 'Your Error Message goes here';

你先设置数据了吗<代码>$this->User->set($this->request->data)看哦,我没有。。。感谢您的更正。请说明您在哪里看到/为什么要将验证规则传递给validates方法,这就是它不起作用的原因。使用CakePHP烘焙控制台生成一些控制器。它们将提供示例代码,用于通过控制器中的方法进行验证。请注意,验证本身仍在模型中进行。您知道这是否在shell脚本中起作用吗?我还需要动态删除一个验证规则,但它说,
validator()
未定义。此函数将添加到模型中的何处?@Kunal此函数可以在任何地方使用,如果从模型本身使用,您可能需要调用$this->validator()->。。。否则,如果在控制器$this->ModelName->validator()中,您可以在验证之前使用它,例如,这取决于。@SDP它应该在shell脚本中工作,只需确保加载模型,然后像正常一样调用它。但是我还没有测试过这个。