#zend-framework #zend-framework3 #laminas
#zend-framework #zend-framework3 #laminas
Вопрос:
можно ли вручную добавить сообщение об ошибке в поле после проверки поля и фильтра ввода?
Мне это понадобится в случае, если имя пользователя и пароль неверны, чтобы пометить эти поля / отобразить сообщения об ошибках.
очевидно, что в ZF / ZF2 это было возможно с $form->getElement('password')->addErrorMessage('The Entered Password is not Correct');
помощью — но это больше не работает в ZF3 / Laminas
Комментарии:
1. я не понимаю, почему за нее проголосовали. это законный вопрос. Я полчаса гуглил и ничего не мог найти.
Ответ №1:
Не зная, как вы выполняете проверку (на самом деле существует несколько методов), самое простое решение — установить сообщение об ошибке при создании InputFilter (а не устанавливать его для элемента после его добавления в форму).
Имейте в виду, что конфигурация формы (элементы, гидраторы, фильтры, средства проверки, сообщения) должна быть установлена при создании формы, а не при ее использовании.
Здесь форма расширяется (с ее inputfilter), как показано в документации:
use LaminasFormForm;
use LaminasFormElement;
use LaminasInputFilterInputFilterProviderInterface;
use LaminasValidatorNotEmpty;
class Password extends Form implements InputFilterProviderInterface {
public function __construct($name = null, $options = []) {
parent::__construct($name, $options);
}
public function init() {
parent::init();
$this->add([
'name' => 'password',
'type' => ElementPassword::class,
'options' => [
'label' => 'Password',
]
]);
}
public function getInputFilterSpecification() {
$inputFilter[] = [
'name' => 'password',
'required' => true,
'validators' => [
[
'name' => NotEmpty::class,
'options' => [
// Here you define your custom messages
'messages' => [
// You must specify which validator error messageyou are overriding
NotEmpty::IS_EMPTY => 'Hey, you forgot to type your password!'
]
]
]
]
];
return $inputFilter;
}
}
Есть и другие способы создания формы, но решение то же самое.
Я также предлагаю вам взглянуть на документацию laminas-validator, вы найдете много полезной информации
Ответ №2:
В LaminasFormElement
классе есть метод с именем setMessages(), который ожидает массив в качестве параметра, например
$form->get('password')
->setMessages(['The Entered Password is not Correct']);
Обратите внимание, что это приведет к удалению всех сообщений об ошибках, которые, возможно, уже есть у вашего элемента. Если вы хотите добавить свои сообщения, как в старом addErrorMessage()
методе, вы можете сделать это следующим образом:
$myMessages = [
'The Entered Password is not Correct',
'..maybe a 2nd custom message'
];
$allMessages = array_merge(
$form->get('password')->getMessages(),
$myMessages);
$form
->get('password')
->setMessages($allMessages);
Вы также можете использовать имя шаблона ошибки, которое Laminas использует для своих сообщений об ошибках, в качестве ключа в вашем массиве сообщений, чтобы переопределить конкретное сообщение об ошибке:
$myMessages = [
'notSame' => 'The Entered Password is not Correct'
];