在模型上给定这一点:
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
也会这样做,但它应该表明,在不涉及模型的情况下,你可以在任何地方验证任何东西。
另请参见
- 食谱>型号>数据验证>正在验证来自控制器的数据
- 食谱>型号>数据验证>核心验证规则