【问题标题】:MultivalidatableBehavior with cakephp 2.3.0. Not Working使用 cakephp 2.3.0 的 MultivalidatableBehavior。不工作
【发布时间】:2014-02-28 09:04:28
【问题描述】:

我在 cakephp 中使用“MultivalidatableBehavior”。虽然它在以前的版本中运行良好。但它不适用于 Cakephp 2.4.0 版本。他们是否对这种行为有任何改变。因为当我使用这段代码时。

var $validationSets = array('里面提到的规则集。');

虽然我的请求通过了 Behavior 类,但它没有对所需字段进行验证。我还检查了$this->request->data 它也有效并且对于已编写规则集的同一模型。

我尝试在我的 MultivalidatableBehavior 类中使用 die 进行调试。虽然在验证期间我的请求属于setValidation(&$model, $rules = array()) { 的功能。请建议它是否与更大版本的cakephp2.3兼容。

我尝试过的代码..

型号代码:

 var $actsAs = array('Multivalidatable');
 var $validationSets = array(
        'login' => array(
            'username' => array('required' => array('rule' => array('notEmpty'), 'message' => 'Username is required !!')),
            'password' => array('required' => array('rule' => array('notEmpty'), 'message' => 'Password is required !!')),
        ),
    ); 

控制器调用。

 $this->User->setValidation('login'); Fields are also with same name. 

它没有验证如果我输入 if($this->User->setValidation('login')) 它返回 false。

【问题讨论】:

  • 定义“不工作”。
  • 对不起,我没有得到你。
  • 你说“它不工作”,这是一个非常糟糕的问题报告:究竟是什么不工作?描述您尝试过的内容以及尝试的结果。显示任何错误消息。正确问题报告的基础知识。它不验证并不一定意味着它是行为。例如,添加一个单元测试来验证或伪造它。
  • 尊敬的先生,我没有收到任何错误信息。我已经编写了我在模型和控制器类中尝试过的代码。如果它不起作用,我期待它会向我发送某种错误或异常。 if($this->User->setValidation('login')) 返回 false 表示它不起作用。这是他们在我班上的一些问题,因为条件返回 false。
  • 对 $this->User->setValidation('login') 的调用应该返回 false。为什么你期望有别的东西?请显示您的控制器中使用的方法。

标签: cakephp cakephp-2.3 cakephp-model


【解决方案1】:

感谢 Piotr Beschel 帮助我。我不应该使用任何行为。它也可以在没有行为的情况下实现。我的模型代码是

public $validationAdmin = array(
        'adminLogin' => array(
            'username' => array('required' => array('rule' => array('notEmpty'), 'message' => 'Please enter your username !!')),
            'password' => array('required' => array('rule' => array('notEmpty'), 'message' => 'Please enter your password !!')),
        ),
        'adminForgotPassword' => array(
            'email' => array('required' => array('rule' => array('notEmpty'), 'message' => 'Please enter your email address !!'),
                'email' => array('rule' => array('email'), 'message' => 'Please enter valid mail address')),
        ),
    );

这只是创建名为 $valdiationAdmin 的变量,我将其命名为 admin 以了解以下规则集适用于 admin。

我的示例控制器代码是。

$this->Admin->validate = $this->Admin->validationAdmin['adminLogin']; 

就这样。如果表单有要保存的数据,它会像黄油一样移动。如果数据只是验证,我必须强制表单验证它(如果登录时未保存数据)。

if ($this->Admin->validates()) { 
} else {
      $errors = $this->Admin->validationErrors;
      $this->set('validationErrors', $errors);
}

它将验证我的表单。甚至在 ctp 文件中的表单字段中添加错误消息。我需要来写$this->form->error('fieldname');

再次感谢所有观众。给我一些更好的建议。如果与一个表单相关联,我正在考虑使用相同的实现来验证其他表单的数据。如果可以,请提供帮助。

【讨论】:

    【解决方案2】:

    方法

    $this->User->setValidation('login')
    

    只选择使用哪个验证集。

    用途:

    if ($this->User->validates()) {
        ...
    

    获取验证结果。

    【讨论】:

    • 但是以前当我使用$this->User->setValidation('login') 它会自动验证我的表单。我以后需要做什么,我需要先选择验证然后用$result = $this->User->validates();验证它吗??
    • 是的。查看 MultivalidatableBehaviour 的示例,对 setValidation() 的调用的返回不会被保留,也不会被检查。无论如何,该方法本身不会返回值。
    猜你喜欢
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2012-05-06
    • 2019-09-11
    相关资源
    最近更新 更多