使用模型规则CakePHP验证URL参数

使用模型规则CakePHP验证URL参数,php,validation,cakephp,Php,Validation,Cakephp,我刚刚写了我的第一篇文章,所以如果我做错了什么,请告诉我! 我的问题是:我想验证url提供的数据 。/log/requests?from=2011-10-18T16:15:00&to=2011-10-18T16:30:00&fmt=csv 我刚刚发现,有一个选项可以使用添加到模型中的规则进行验证 public $validate = array( 'request_id' => array( 'alphaNumeric' => array(

我刚刚写了我的第一篇文章,所以如果我做错了什么,请告诉我! 我的问题是:我想验证url提供的数据

。/log/requests?from=2011-10-18T16:15:00&to=2011-10-18T16:30:00&fmt=csv

我刚刚发现,有一个选项可以使用添加到模型中的规则进行验证

public $validate = array(
    'request_id' => array(
        'alphaNumeric' => array(
            'rule'     => 'alphaNumeric',
            'required' => true,
            'message'  => 'Alphabets and numbers only'
        ),
    )
);
在控制器中使用“ModelName->set($params)”,然后“ModelName->validates()”-函数应传递答案(如果其有效或无效)。我的解决方案与当前解决方案的唯一区别 我的控制器使用了几个模型来收集响应数据。 问题是“validates()”-函数只返回“valid”,即使我输入了特殊字符或其他应该是“无效”的内容,也会返回“valid”——由模型规则签名。 救命啊

这不是答案,而是为了帮助OP而添加的

我已经创建了一个测试控制器/模型来测试您的情况。我故意没有扩展'AppController'/'AppModel'来删除那些导致问题的代码

我的测试模型(app/model/Some.php)

我的测试控制器(app/controller/SomeController.php)

产出:

\app\Controller\SomeController.php (line 32)
false
\app\Controller\SomeController.php (line 37)
true

此测试设置似乎按计划工作,因此您可以尝试在应用程序中测试这些设置,以缩小问题的原因。可能某个行为附加到您的AppModel,其中包含“beforeValidate()”回调并禁用请求id字段的验证?

能否将
$params
变量的内容添加到您的问题中?您可能需要向$params数组添加ModelAlias密钥,如下所示<代码>$params=array('MyModelAlias'=>$params)我刚刚用这个“$params=array('request_id'=>'4*G/&2')测试了它。我只是想稍后验证和选择。(感谢您的快速响应:)
$params=array('request_id'=>'4*G/&2')
有效吗?如果没有,试试这个<代码>$params=array('ModelName'=>array('request_id'=>'4*G/&2')。您可以在不保存数据的情况下手动“验证”数据,这是正确的,但是,模型将在“参数”数据中查找以模型的“别名”(例如“ModelName”)命名的键,并且仅验证该键内的字段。如果ModelAlias密钥丢失,它将找不到要验证的“字段”。我将其更改为“$params=array('LogBackend'=>array('request_id'=>'4*G/&2');”
class SomeController extends Controller
{
    public $uses = array('Some');

    public function index()
    {
        $this->autoRender = false;

        $params = array('Some' => array('request_id'=>'4*G/&2'));
        $this->Some->set($params);
        $result = $this->Some->validates();
        debug($result);

        $params = array('Some' => array('request_id'=>'AAAA'));
        $this->Some->set($params);
        $result = $this->Some->validates();
        debug($result);

    }
}
\app\Controller\SomeController.php (line 32)
false
\app\Controller\SomeController.php (line 37)
true