最近我参与了两个CakePHP Web应用程序。第一个我使用CakePHP格式的表需要它们,验证似乎正常工作。对于第二个应用程序,我正在使用$useTable = false
,而是使用[模型名称] - > query()函数来执行控制器内部的SQL存储过程以保存和更新数据,但是遇到了模型验证的几个问题。
示例1: 我有一个名为'WeekName'的字段,数据库中的字符数限制为50个字符。我的模型验证设置如下所示,它与Cake文档相匹配,但它很高兴地尝试保存超过50个字符的字符串长度。
'WeekName' => array(
'allowEmpty' => false,
'rule' => array('maxLength', '50'),
'message' => 'No more than 50 characters long.'
),`
示例2: 我最近创建了一个关于添加验证的问题,其中两个字段之一需要包含数据以便控制器处理数据。在尝试了几条建议后,没有任何工作,它根本不检查验证,只是继续处理控制器函数中的代码。
所有这些问题让我想知道在$useTable = false
时是否忽略了模型验证,以及是否有意这样做,如果有这种情况我可以启用模型验证。
如果有人对此问题有任何见解,可能会导致什么问题,或者是否有可能的解决方案会受到高度赞赏。
谢谢。
备注:
使用CakePHP 2.7进行开发
答案 0 :(得分:2)
CakePHP验证规则适用于没有表格的模型。但是,在使用$this->ModelName->query()
保存数据之前,您似乎未对数据运行验证。与save()
不同,query()
在保存之前不会自动运行验证,因为它不使用CakePHP的回调来测试数据。
除非确实有必要,否则我要避免使用query()
手动查询数据库并使用save()
,但如果您需要这样做,则必须手动验证: -
$this->ModelName->set($this->request->data);
if ($this->ModelName->validates()) {
// Save your data using query()
$this->ModelName->query();
} else {
// Validation failed
}
这会根据模型设置数据,然后根据模型的验证规则运行设置数据。如果成功,它将运行您的query()
。
有关详细信息,请参阅文档中的Validating Data from the Controller。