所以我使用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"=>"")))
它不会对用户名字段执行验证并在数据库中保存为空,即使我在我的模型中规定用户名值不能为空。那我错了?
答案 0 :(得分:2)
根据this page,它应该是:
'rule' => 'notEmpty'
(注意'notEmpty'周围缺少一个数组)
尽管CakePHP书中的一些地方(上图)显示了这一点,但我个人喜欢这样做,因为它似乎遵循其余的验证惯例(并且在整本书的许多地方都有展示)以及):
'allowEmpty' => false,
其次,您需要了解“allowEmpty / notEmpty”和“required”之间的区别。根据{{3}}:
required和allowEmpty之间的区别可能令人困惑。 'required'=> true表示如果没有,则无法保存模型 该字段的密钥出现在$ this->数据中(检查是 用isset执行);而','allowEmpty'=>错误确保 如上所述,当前字段值是非空的。
基本翻译:'required'表示您保存该项目的任何时候,您必须包含该字段。虽然'allowEmpty'等等意味着如果你通过那个字段,它就不能为空。
答案 1 :(得分:0)
验证规则中需要required => true
,如果未提供用户名密钥,则验证将失败。我建议将它与on => create
配对,这样就很有可能在创建行时发生。
$validate = array(
'username' => array(
'not-empty' => array(
'rule' => array('notEmpty'),
'message' => 'A username is required',
'required' => true,
'on' => 'create'
),
));