Считайте свойство правила проверки в CakePHP 3.x для использования в функции js - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть правило проверки в одном из моих 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?Потому что в противном случае мой код не СУХОЙ, так как я определяю ограничение 3000 в нескольких местах, и, если он меняется, проблематично запомнить / обновить.

Возможно ли прочитать свойство maxLength непосредственно из validationDefaultдля поля comment?Этот вопрос касается того, как получить доступ к данным, определенным в классе Table;Я в порядке, зная, как передать его js через ajax.

У меня нет больше кода, чтобы показать, потому что я не знаю, возможно ли / как это вообще возможно.

CakePHP 3.5.13

1 Ответ

0 голосов
/ 05 декабря 2018

Чтобы получить значение правила проверки, вы должны получить Validator из Table, затем 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 в своем ответе упомянул о других возможностях:

На уровне помощника / контекста формы также можно прочитать схему и поддержку дляпреобразование его конфигурации длины и значения правила валидации в атрибут maxlength HTML для CakePHP 3.7

Дополнительная информация:

Получение валидаторов из таблиц

Класс Validator

Класс ValidationSet

Класс ValidationRule

...