如何在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可以做到这一点,这个示例当然没有太大意义,但是它应该表明您可以在任何地方验证任何东西而无需涉及模型。

另请参见