【问题标题】:Validating URL-Parameter by using Model-Rules CakePHP使用模型规则 CakePHP 验证 URL 参数
【发布时间】:2013-03-06 13:53:26
【问题描述】:

我刚刚写了我的第一篇文章,所以如果我做错了什么,请告诉我! 我的问题:我想验证 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()” - 函数只会返回“有效”,即使我输入了特殊字符或其他应该是“无效”的东西 - 由模型规则签名。 救命!

【问题讨论】:

  • 您能否将$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'));。您是正确的,您可以手动“验证”数据,而不保存它,但是,模型将在“参数”数据中查找以模型“别名”命名的键(例如“模型名称”)和仅验证该键内的字段。如果缺少 ModelAlias 键,它将找不到要验证的“字段”
  • 嗯,我把它改成了“$params = array('LogBackend' => array('request_id'=>'4*G/&2'));”

标签: php validation cakephp


【解决方案1】:

不是答案,而是为了协助 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 字段的验证?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多