У меня есть собственный метод проверки, который проверяет поле для значений токенов, чтобы убедиться, что все они присутствуют в контенте. Метод работает нормально, он проверяется как OK, когда все токены существуют в контенте, и выдает ошибку проверки, если один или несколько токенов отсутствуют.
Я могу легко применить сообщение об ошибке проверки, чтобы указать, что некоторые токены отсутствуют, когда я присоединяю свое пользовательское правило проверки к своей таблице в validationDefault()
, Тем не менее, я действительно хочу установить сообщение проверки, которое отражает, какие из токенов не были установлены. Как я могу динамически установить сообщение проверки в CakePHP 3? В CakePHP 2 я использовал $this->invalidate()
применить соответствующее сообщение, но это больше не представляется возможным.
Мой код выглядит следующим образом (я удалил свою фактическую проверку токенов, поскольку она не имеет отношения к проблеме здесь):
public function validationDefault(Validator $validator)
{
$validator
->add('content', 'custom', [
'rule' => [$this, 'validateRequiredTokens'],
'message' => 'Some of the required tokens are not present'
]);
return $validator;
}
public function validateRequiredTokens($check, array $context)
{
$missingTokens = [];
// ... Check which tokens are missing and keep a record of these in $missingTokens ...
if (!empty($missingTokens)) {
// Want to update the validation message here to reflect the missing tokens.
$validationMessage = __('The following tokens are missing {0}', implode(',', $missingTokens));
return false;
}
return true;
}
Прочитайте документацию по API.
Скопировать и вставить:
Устанавливает сообщения об ошибках для поля или списка полей. При вызове без второго аргумента он возвращает ошибки проверки для указанных полей. Если вызывается без аргументов, он возвращает все сообщения об ошибках валидации, сохраненные в этой сущности и любой другой вложенной сущности.
// Sets the error messages for a single field
$entity->errors('salary', ['must be numeric', 'must be a positive number']);
// Returns the error messages for a single field
$entity->errors('salary');
// Returns all error messages indexed by field name
$entity->errors();
// Sets the error messages for multiple fields at once
$entity->errors(['salary' => ['message'], 'name' => ['another message']);
http://api.cakephp.org/3.3/class-Cake.Datasource.EntityTrait.html#_errors
Других решений пока нет …