【问题标题】:CakePHP validation always trueCakePHP 验证始终为真
【发布时间】:2011-12-29 14:11:50
【问题描述】:

过去一个小时左右我一直在为此苦苦挣扎,想知道一些新鲜的眼睛是否可以提供帮助。

型号

class User extends AppModel {
public $name = 'User';
public $validate = array(
    'email' => array(
        'valid' => array(
            'rule' => 'email',
            'message' => 'The email is not valid'
        ),
        'required' => array(
            'rule' => 'notEmpty',
            'message' => 'Please enter an email'
        )
    )
);
}

控制器

class UserController extends AppController {

var $uses = array('User');

function index(){
    $users = $this->User->find('all');
    $this->set(compact('users'));
}

public function add() {
    $this->set('title_for_layout', 'Add new user');

    if(isset($this->data) && !empty($this->data)) {
        $this->User->set($this->data);
        $this->log($this->User->invalidFields(), "debug");

        if($this->User->validates()){
            if ($this->User->save($this->data)) {

                $this->Session->setFlash("Added " . $this->data['User']['name']);
                $this->redirect('index');
            }
        } else {
            $this->Session->setFlash('There are errors with your form submit, please see below.');
        }

    }
}

}

查看

<?php
    echo $this->Form->create('User'); 
    echo $this->Form->input('name', array('label' => 'Name'));
    echo "<div class='clear'></div>";
    echo $this->Form->input('email', array('label' => 'Email'));
    echo "<div class='clear'></div>";
    echo $this->Form->button('Reset', array('type' => 'reset'));
    echo $this->Form->button('Add Useer', array('type' => 'submit'));
    echo $this->Form->end(); 
?>

但我从来没有收到无效的电子邮件字段?我错过了什么明显的东西吗?

如果有什么不同,这是我正在开发的插件,因此它不直接位于 app/ 中,而是位于 app/Plugins 中

谢谢

编辑:所以我已经为此苦苦挣扎了一段时间,但仍然没有快乐。不过,我注意到的一件事是,当我打印出模型详细信息(使用 var_dump($this->User) )时,[validate] 数组为空。例如:

[validate] => Array
    (
    )

[validationErrors] => Array
    (
    )

我假设这就是问题所在,即使我已经声明了我的 $validate 数组,它以某种方式被覆盖了?有人遇到过这个吗?有什么解决办法吗?

【问题讨论】:

  • 你有几个关于简单性的缺陷——但除此之外它看起来还不错。只有一件事:始终对所有子规则使用“last”=>true。哦,create() 不见了
  • 'last'=>true 是您在需要时使用的东西 - 这当然不是必需的 - 有时最好一次向用户显示该字段的任何/所有问题,而不是一次一个。
  • 你使用的是什么版本的 cakephp?
  • 您的意思是它永远不会使电子邮件无效,无论您将输入留空还是输入无效的电子邮件?所以它总是拯救用户?另外,请提供您使用的蛋糕版本。
  • 嗯,我想我回答了。运行 Cake 2.0,并且在使用此插件保存/验证时绝对没有验证。请参阅下面的评论:扩展默认 AppModel 类,这会有所不同吗?

标签: validation cakephp


【解决方案1】:
public $validate = array(
    'email' => array(
        'valid' => array(
            'rule' => array('email'),
            'message' => 'The email is not valid'
        ),
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'Please enter an email',
            'allowEmpty' => false
        )
    )
);

尝试将规则添加为数组,并在所需的验证中添加设置为 false 的“allowEmpty”键。

【讨论】:

  • 我试过这个,不高兴。感谢您的尝试。我觉得这与它是一个插件有关,并且我扩展了默认的 AppModel 类。
  • 我错过了它是插件xD的部分
【解决方案2】:

该死!很简单。如果我在http://book.cakephp.org/1.3/en/view/1114/Plugin-Models 正确阅读食谱,它会告诉我

如果您需要在插件中引用模型,则需要在模型名称中包含插件名称,并用点分隔。

因此..

var $uses = array('Plugin.User');

有效..希望这对其他人有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-12
    • 2016-01-20
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 2016-05-05
    • 2020-12-21
    • 2020-11-18
    相关资源
    最近更新 更多