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

另请参见

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...