Доброе время суток, проблема у меня такого плана:
на сайте что я сейчас делаю аутентификация происходит по email, собственно я хотел бы до вызова login_check проверять валидный ли почтовый адрес указан или нет и выводить об этом ошибку (мало ли, человек неопытный и забыл .ru в конце добавить, например).
Собственно вижу несколько вариантов решения:
1. Сначала анализировать POST данные, проверять валидатором их правильность и потом каким либо образом сделать подзапрос к /login_check
2. Прописать failure_handler и в нём уже проверять правильность введённых данных.
3. Попробовать разобраться при помощи событий
1й вариант мне реализовать не удалось, так как при редиректах и форвардах я не разобрался как передавать параметры
2й мне не очень нравиться потому что валидация происходит после первой неправильной попытки, мне кажеться что должен быть вариант решения в том виде как я хочу сделать
3е — даже не пробовал, ибо это для меня пока дремучий лес
P.S. Таки сделал я 1й вариант, не очень правильно, но если гуру меня поправят буду очень благодарен (лишнее я вырезал в примере, а то непонятно о чём речь):
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
if ($form->isValid()) {
$req = Request::create(
$this->generateUrl('security_check'),
'POST',
array(
'_username' => $customer->getEmail(),
'_password' => $customer->getPass()
),
$request->cookies->all(),
array(),
$request->server->all()
);
$resp = $this->get('http_kernel')->handle($req,HttpKernelInterface::MASTER_REQUEST);
if ($security_context->getToken()) {
return $resp;
} else {
$auth_errors []= 'Неверно набраны почтовый ящик и/или пароль';
}
}
P.P.S. Но теперь покопавшись в исходниках + увидев что после моих предыдущих махинаций какие-то совсем уж рекурсивно запутанные сессии получились, я считаю что правильный вариант — №3, как научусь вручную вызывать события — напишу, ибо в документации не нашёл про это.