【问题标题】:CakePHP - Where to put reusable custom validation rules?CakePHP - 在哪里放置可重用的自定义验证规则?
【发布时间】:2013-06-23 19:59:27
【问题描述】:

我想添加一个自定义验证规则,必要时可以在整个应用程序中重复使用。放在哪里最好?

我知道我可以将它们放在 AppModel 中,但它很混乱,并且使用仅偶尔用于验证的方法污染/膨胀 AppModel,我发现我需要在它们前面加上 validateUsernamevalidateCustom 等。使它们与 AppModel 中的其他方法清晰地组织起来。我觉得在 OOP 结构中有更好的方法来做到这一点。

例如,有没有办法将自定义规则指定为Lib 类的静态方法?

例如

app/Lib/Validate.php

class Validate {

    public function username($value) {
        $value = array_shift($value);
        return preg_match('/^[A-Z0-9_-]+$/i', $value);
    }
}

然后在需要时仅在模型中使用规则:

app/Model/MyModel.php

App::uses('Validate', 'Lib');

class MyModel extends AppModel {

    public $validate = array(
        'username' => array(
            'rule' => 'Validate::username',
            'message' => 'Username contains invalid characters'
        )
    );
}

【问题讨论】:

  • 我通常将它们直接放在我的 MyModel 中。但是,是的,一个自己的 lib 类会更干净。不过要小心:验证为类名已被核心使用。 cake2.x 需要 MyValidate 等
  • 您也可以在它自己的存储库中制作一个插件,然后简单地将该插件包含在您需要的任何应用程序中。这样你就可以重复使用它。

标签: validation cakephp cakephp-2.0 cakephp-2.3


【解决方案1】:

你可以用一个行为来做到这一点。 http://book.cakephp.org/2.0/en/models/behaviors.html 有一个设置回调可用于附加验证规则或创建自己的自定义函数。然后,您可以根据需要将行为附加到模型。

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2018-02-09
    • 2023-03-26
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多