我如何验证 CakePHP 2 中的 GET 控制器参数?

How can I validate GET controller params in CakePHP 2?

给定模型:

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 请求修改数据库是 anti-pattern。即使你假设一个友好的用户代理(你永远不应该这样做!),浏览器也会表现得很古怪并做一些意想不到的事情,例如多次发送 GET 请求(这是完全有效的,因为 GET 不是 ment修改数据),他们通常不会 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 会做同样的事情,但是它应该只是表明你可以在不涉及模型的情况下在任何地方验证任何东西。

另见