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


Validating URL-Parameter by using Model-Rules CakePHP

我刚刚写了我的第一篇文章,如果我做错了什么请告诉我!我的问题:我想验证url给出的数据。

. ./日志/请求吗? = 2011 - 10 - 18岁t16:15:00& = 2011 - 10 - 18 - t16: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()"函数,无论其是否有效,都应该提供答案。我的解和http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html的解的唯一不同之处我的控制器使用几个模型来收集响应的数据。问题是,"validates()"函数只返回"有效",即使我输入了特殊字符或其他应该"无效"的东西-由模型规则签名。的帮助!

这是不是的回答,而是为了协助OP;

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

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

class Some extends Model
{
    public $name = 'Some';
    public $useTable = 'false';

    public $validate = array(
        'request_id' => array(
            'alphaNumeric' => array(
                'rule'     => 'alphaNumeric',
                'required' => true,
                'message'  => 'Alphabets and numbers only'
            ),
        )
    );
}

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

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

这个测试设置似乎按照计划工作,所以您也可以尝试在您的应用程序中测试这些设置,以缩小问题的原因。也许一些行为附加到你的AppModel包含一个'beforeValidate()'回调,并禁用request_id字段的验证?