【问题标题】:Controller validation in CakephpCakephp 中的控制器验证
【发布时间】:2023-04-02 14:31:01
【问题描述】:

我希望在 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");
            }

无论字段是否正确,它总是让我处于正确的状态。请帮忙

【问题讨论】:

  • 你先设置数据了吗? $this->User->set($this->request->data);manual
  • 哦,我没有……谢谢指正。
  • 请说明您在哪里看到/为什么将验证规则传递给方法 validates it's not expecting rules,这就是它不起作用的原因。
  • 使用 CakePHP 烘焙控制台生成一些控制器。他们将提供示例代码,用于通过控制器中的方法进行验证。请注意,验证本身仍会在您的模型中进行。

标签: cakephp cakephp-2.3


【解决方案1】:

设置 $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 的规则有误

您可以在此处阅读有关绑定规则的更多信息:http://book.cakephp.org/2.0/en/models/data-validation.html#dynamically-change-validation-rules

【讨论】:

  • 知道这是否可以在 shell 脚本中工作吗?我还需要即时删除验证规则,但它说 validator() 未定义。
  • 这个函数要加在model的什么地方?
  • @Kunal 这可以在任何地方使用,如果从模型本身使用,您可能需要调用 $this->validator()-> ... 否则如果在控制器中 $this->ModelName- >validator() 例如,你可以使用它 beforeValidate,这取决于。
  • @SDP 它应该在 shell 脚本中工作,只要确保加载模型,然后像往常一样调用它。不过我还没有测试过。
【解决方案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';

【讨论】:

    【解决方案3】:

    编辑您的代码:

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

    它对我有用 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多