如何在CakePHP 2中验证GET控制器参数



在模型上给定这一点:

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也会这样做,但它应该表明,在不涉及模型的情况下,你可以在任何地方验证任何东西。

另请参见

  • 食谱>型号>数据验证>正在验证来自控制器的数据
  • 食谱>型号>数据验证>核心验证规则

相关内容

  • 没有找到相关文章

最新更新