问题描述
在模型上给出以下信息:
public $validate = [
'amount' => array(
'rule' => array('comparison','>=',0),'message' => 'You must buy over 0 of this item!'
)
];
如何验证以下参数2?
public function buy(int $item,int $amount) {
验证似乎仅针对POST构建,我想从此处退出。
解决方法
首先,由于许多不同的原因,使用GET
请求修改数据库是一种反模式。即使您假设一个友好的用户代理(您永远都不要!),浏览器也可能会表现古怪,并会执行意外的操作,例如多次发送GET
请求(这完全有效,因为GET
并不重要修改数据),而通常不会用于POST/PUT/DELETE
。
我强烈建议您更改端点以代替处理POST
请求。
话虽如此,您通常可以验证所需的任何内容,验证机制首先主要是验证数据,他们不知道或不在乎数据的来源。您可以将所需的任何数据交给模型,然后让它进行验证:
$data = array(
'item' => $item,'amount' => $amount,);
$this->ModelName->set($data);
if ($this->ModelName->validates()) {
// data is valid
} else {
// data is invalid
$errors = $this->ModelName->validationErrors;
}
此外,您也可以完全手动使用CakePHP的验证方法:
App::uses('Utility','Validation');
$isValid = Validation::comparison($amount,'>' 0);
考虑到$isValid = $amount > 0
可以做到这一点,这个示例当然没有太大意义,但是它应该表明您可以在任何地方验证任何东西而无需涉及模型。
另请参见