使用Model-Rules CakePHP验证URL参数

时间:2013-03-06 13:53:27

标签: php validation cakephp

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

../日志/请求从= 2011-10-18T16:15:00&安培;要= 2011-10-18T16:30:00&安培; FMT = CSV

我刚刚发现有一个选项可以验证添加到模型中的规则。

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

在Controller中使用“ ModelName-> set($ params)”,之后“ ModelName-> validates()” - 函数应该提供如果有效或无效,请回答。我的解决方案与http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html解决方案之间的唯一区别 是我的控制器使用几个模型来收集响应的数据。 问题是“ validates()” - 函数只返回“有效”,即使我输入特殊字符或其他东西应该是“无效” - 由模型规则签名。 救命啊!

1 个答案:

答案 0 :(得分:0)

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

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

我的测试模型(app / Model / 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

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