【问题标题】:CakePHP does not validate fieldsCakePHP 不验证字段
【发布时间】:2012-01-20 22:23:48
【问题描述】:

所以我使用的是 CakePHP 2.0.5。

我的模特:

class User extends AppModel {
public $name = 'User';
public $validate = array(
    'username' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'A username is required'
        )
    ));}

然后我在控制器执行此操作它工作正常并给我错误,因为字段用户名是空的:

$this->User->create();
$this->User->save(array("User"=>array("username"=>"")))

但是,如果我传递其他命名字段,例如:

$this->User->create();
$this->User->save(array("User"=>array("something"=>"")))

即使我在我的模型中规定用户名值不能为空,它也不对用户名字段执行验证并在数据库中保存为空。那我哪里错了?

【问题讨论】:

  • 您的数据库中的用户名字段是否有默认值?

标签: validation cakephp cakephp-2.0


【解决方案1】:

根据this page,应该是:

'rule' => 'notEmpty'

(注意'notEmpty'周围缺少一个数组)

虽然在 CakePHP 书中的一些地方(如上)以这种方式显示,但我个人喜欢这样做,因为它似乎遵循其余的验证约定(并且在本书的许多地方都有显示以及):

'allowEmpty' => false,

其次,您需要了解“allowEmpty/notEmpty”和“required”之间的区别。根据this page

required 和 allowEmpty 之间的区别可能会令人困惑。 'required' => true 表示没有 此字段的键存在于 $this->data 中(检查是 用 isset 执行);而 'allowEmpty' => false 确保 如上所述,当前字段值非空。

基本翻译:“必填”表示每次保存该项目时,都必须包含该字段。虽然 'allowEmpty'..etc 表示如果您通过该字段,则它不能为空。

【讨论】:

  • 是的,这有点令人困惑。但是感谢您的回复,这很有帮助。
  • @Ed - 很高兴为您提供帮助! (我同意 - 前几次处理这个问题我很困惑)提醒 - 如果任何一个答案有助于解决您的问题,最好将其标记为答案。
【解决方案2】:

您的验证规则中需要required => true,如果未提供用户名密钥,这将导致验证失败。我建议将它与on => create 配对,这样它只会在创建行时发生。

$validate = array(
'username' => array(
    'not-empty' => array(
        'rule' => array('notEmpty'),
        'message' => 'A username is required',
        'required' => true,
        'on' => 'create'
    ),

));

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 2018-03-24
    相关资源
    最近更新 更多