【问题标题】:Cakephp 2.+ $this->Model->validates(); always return trueCakephp 2.+ $this->Model->validates();总是返回真
【发布时间】:2014-03-13 17:44:50
【问题描述】:

我已经通过 stackoverflow 进行了搜索。大多数问题类似于这个问题,但它对我没有帮助。我已经阅读了 cakephp 2.0 的文档,但仍然找不到我的答案。

我的问题是:我在视图中有单独的表单。每个帖子都有不同的 $this->request->data。这是我想要的。我希望每个表单都使用该模型的验证子集。但问题是它们总是“回归真实”。即使我已经指定了 fieldList。

查看:

    <?php echo $this->Form->create('User'); ?>
    <?php echo $this->Form->input('Postcode');?>
    <?php echo $this->Form->input('Postcodeletter');?>
    <?php echo $this->Form->submit('Submit');?>
    <?php echo $this->Form->end();?>

    <?php echo $this->Form->create('User'); ?>
    <?php echo $this->Form->input('Password');?>
    <?php echo $this->Form->input('checkPassword');?>
    <?php echo $this->Form->submit('Submit');?>
    <?php echo $this->Form->end();?>

控制器:

unset($this->request->data['User']['Id']);
$this->User->set($this->request->data);

if ($this->User->validates(array('fieldList' => array('Postcode')))) {

            //valid

            } else {
           //error
    }

型号:

    class User extends AppModel {

public function beforeSave($options = array()){
    if(isset($this->data['User']['Password'])){
        $this->data['User']['Password'] = AuthComponent::password($this->data['User']['Password']);
    }
    return true;
}
public $primaryKey = 'Id';

public $validate = array(

   'Firstname' => array(
            'rule' => 'notEmpty',
            'allowEmpty' => false,
            'on' => 'create',
            'message' => '*Vult uw voornaam in' 
    ),
'Postcode' => array(
        'numeric' => array(
            'rule' => 'numeric',
            'allowEmpty' => false,
            'on' => 'create',
            'message' => 'Needs to be numbers'  
            ),
        'minLength' => array(
            'rule' => array('minLength',4),
            'allowEmpty' => false,
            'on' => 'create',
            'message' => 'Min 4 numbers'
            )
          )

);// end $validate

}

我在“if 语句”中做错了什么吗?

Ps:我已经缩短了我的代码,我认为问题很清楚,我很抱歉我的英语不好。

更新:

已添加$this-&gt;User-&gt;set($this-&gt;request-&gt;data);
添加了unset($this-&gt;request-&gt;data['User']['Id']) 现在它可以工作了。

【问题讨论】:

  • 数据库字段叫什么?
  • 其余代码在哪里? validates() 永远不会单独工作。它总是需要先将数据传递给模型。
  • @cornelb |名字 |邮编 |
  • @mark 我忘了 $this->User->set($this->request->data); ,我最近设置了这个,还在调试。但我认为这是这里的东西。
  • 您应该向我们展示 $this->request->data 中的发布数据以及 $this->User->validationErrors 在 validates() 调用之后包含的内容。

标签: validation cakephp controller


【解决方案1】:

如果没有正当理由,请勿使用'on' =&gt; 'create'。 在你的情况下不是。

您可能希望始终验证 minLength 或 notEmpty,即使在编辑时也是如此。

【讨论】:

    【解决方案2】:

    您的 Debug-Level 是否在 Core-Config 中设置为 2? (app/Config/core.php)

    您可以在您的控制器中将 this 的输出添加到您的问题中吗?

    // Put this before your If-Statement
    
    debug( $this->User->invalidFields(); );
    
    // You may copy the rendered output
    

    我不了解您的软件,但帮助我经常弄清楚为什么 cake 的行为与我的预期如此相反的原因是使用 PHP-IDE 和 X-Debug 调试我的代码。

    【讨论】:

    • 调试级别为“2”。和调试($this->User->invalidFields());给了我'array()',没有结果。
    • 你提交的表单数据肯定是无效的?
    • 我认为它是无效的。我想要邮政编码最少 4 个数字。我刚刚输入了两个数字。我的模型的规则可能是错误的吗?
    • 您至少在“//end postcode”之后缺少一个(右)括号“)”/-如果您在代码中正确缩进数组,则每个括号后不需要 cmets - 然后它会很容易阅读;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多