【问题标题】:Read property of a validation rule in CakePHP 3.x for use in a js function读取 CakePHP 3.x 中验证规则的属性以用于 js 函数
【发布时间】:2018-12-05 11:29:05
【问题描述】:

我的 Table 类之一中有一个验证规则,如下所示:

public function validationDefault(Validator $validator)
{
    $validator
        ->scalar('comment')
        ->maxLength('comment', 3000)
        ->requirePresence('comment', 'create')
        ->notEmpty('comment');

    return $validator;
}

这会验证输入的 comment 字段,这意味着它的长度不能超过 3000 个字符。在 PHP 中工作时所有这些都很好。

我的应用程序的一部分使用了 JavaScript 字符计数器——当用户键入时,它会告诉用户他们在一个字段中还有多少剩余字符。用于此的 js 工作正常,硬编码限制为 3000。

但是,我想知道是否有办法避免在我的 js 中硬编码这个限制?因为否则我的代码不是 DRY,因为我在多个地方定义了 3000 个限制,如果它发生变化,那么记住/更新就会有问题。

是否可以直接从validationDefault 读取maxLength 属性以获取comment 字段?这个问题涉及如何访问 Table 类中定义的数据;我很了解如何通过 ajax 将其传递给 js。

我没有任何进一步的代码可以显示,因为我不知道这是否/如何实现。

CakePHP 3.5.13

【问题讨论】:

    标签: php cakephp cakephp-3.0


    【解决方案1】:

    要获取验证规则值,您必须从Table 获取Validator,然后获取ValidationSet,然后获取ValidationRule,从中可以提取所需的结果。示例控制器代码如下:

    $validator = $this->YourTable->getValidator("default");
    $validationSet = $validator->field("comment");
    $validationRule = $validationSet->rule("maxLength");
    $result = $validationRule->get("pass");
    

    或者,只需一行:

    $result = $this->YourTable->getValidator("default")->field("comment")->rule("maxLength")->get("pass");
    

    返回值将是传递给验证规则的附加参数数组,在您的情况下,它应该如下所示:

    array(1) {
      [0]=>
          int(3000)
    }
    

    另外,@ndm 在他的回答中提到了其他可能性:

    在表单助手/上下文级别,也可以读取模式,并且支持将其长度配置和验证规则值转换为最大长度 HTML 属性,正在为 CakePHP 3.7 实现

    进一步阅读:

    Getting validators from tables

    Validator class

    ValidationSet class

    ValidationRule class

    【讨论】:

    • 看起来你比我快了几秒钟......也许你可以添加一个关于即将自动处理长度模式配置和最大长度验证规则的注释,然后我可以删除我的答案。
    • @ndm - 当然,我添加了这个信息。
    • 对于presenceRequired/allowEmpty验证检查,使用$this->YourTable->getValidator("default")->field("comment")->isPresenceRequired/isEmptyAllowed();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2017-01-23
    • 2020-01-08
    相关资源
    最近更新 更多