У меня есть форма, созданная с некоторыми пользовательскими валидаторами, и они работают как чудо, но у меня возникают проблемы с добавлением нового валидатора, который работает немного по-другому.
В основном мне нужно проверить данные изформа со значением, которое я обычно могу извлечь из сущности.
В этом случае мне нужно получить соль пользователя (используя $ user-> getSalt ()).Кажется, проблема в том, что класс CallbackValidator не может принимать какие-либо другие данные, кроме $ form.
Мой код:
$user = $this->get('security.context')->getToken()->getUser();
$form = $this->createFormBuilder($user)
->add('password', 'password')
->add('newPassword', 'password', array('label' => 'New Password', 'property_path' => false))
->add('confirmPassword', 'password', array('label' => 'Confirm Password', 'property_path' => false))
->addValidator(new CallbackValidator(function($form)
{
$encoder = new MessageDigestPasswordEncoder('sha1', false, 1);
$password = $encoder->encodePassword($form['password']->getData(), $user->getSalt());
if($password != $user->getPassword()) {
$form['password']->addError(new FormError('Incorrect password'));
}
if($form['confirmPassword']->getData() != $form['newPassword']->getData()) {
$form['confirmPassword']->addError(new FormError('Passwords must match.'));
}
if($form['newPassword']->getData() == '') {
$form['newPassword']->addError(new FormError('Password cannot be blank.'));
}
}))
->getForm();
Теперь получаю ошибку:
Fatal error: Call to a member function getSalt() on a non-object in /Sites/src/UserBundle/Controller/DashboardController.php on line 57
Строка 57:
$password = $encoder->encodePassword($form['password']->getData(), $user->getSalt());
Я пробовал разные вещи, чтобы попытаться передать соль в CallbackValidator, и до сих пор единственный способ - добавить ее в форму как поле hiddne.НО это неприемлемо, так как это угроза безопасности, и мне также нужно было бы добавить хешированный пароль в качестве скрытого поля для сопоставления ввода с.
Должен быть более простой способ сделать это?