2013-10-07 23 views
0

我希望在cakephp中的控制器中验证。虽然我的验证在Model中运行良好,但是我不希望在控制器中验证它。Cakephp中的控制器验证

我在控制器中进行了验证。

$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"); 
      } 

它总是以正确的条件终止我,如果字段是正确的没有关系。请帮助

+4

您是否设置了数据? '$ this-> user-> set($ this-> request-> data);'参见[manual](http://book.cakephp.org/2.0/en/models/data-validation/validating-data- from-the-controller.html) – arilia

+0

哦,我没有......感谢您的纠正。 – Sankalp

+1

请显示你在哪里见过/为什么你通过验证规则的方法验证[它不期望规则](https://github.com/cakephp/cakephp/blob/master/lib/Cake/Model/Model。 php#L3137)这就是为什么它不起作用。 – AD7six

回答

5

设置$这个 - >型号 - >验证= $验证;将按照上一个答案中的建议工作,但您可能会覆盖可能在模型中设置的所有其他验证规则。这是更好的添加,修改和删除验证规则对飞象这样:

$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设置

错误的规则

你可以此处详细了解约束力的规则:http://book.cakephp.org/2.0/en/models/data-validation.html#dynamically-change-validation-rules

+0

任何想法,这是否从一个shell脚本内工作?我还需要移除一个验证规则,但它说'validator()'是未定义的。 – emersonthis

+0

这个函数在模型中被添加到哪里? –

+0

@Kunal这可以在任何地方使用,如果从模型本身使用你可能需要调用$ this-> validator() - > ...否则如果在控制器中$ this-> ModelName-> validator() You可以在验证之前使用它,例如,它取决于。 – HelloSpeakman

0

编辑代码:

$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' 
        ) 
      )); 

它和我一起工作:)

2

试试这个 -

$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';