1

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

../Logs/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() ”函数应该提供答案,如果其有效与否。我的解决方案与http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html上的解决方案之间的唯一区别 是我的控制器使用了几个模型收集响应数据。问题是“ validates() ” - 函数只返回“有效”,即使我输入了特殊字符或其他应该是“无效”的东西 - 由模型规则签名。帮助!

4

1 回答 1

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

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

于 2013-03-06T15:08:36.670 回答