У меня есть много форм, которые пользователь заполняет на одной странице, но после того, как пользователь сделал сообщение, контроллер проверит, является ли форма действительной, и если пользователь уже вошел в систему, сохраните информацию.
Нужна помощь с
Если пользователь не вошел в систему, перенаправьте его на страницу регистрации, где он зарегистрируется, и после регистрации он получит автоматический вход в систему, после чего он должен вернуться к тому же контроллеру с опубликованными значениями, чтобы его можно было сохранить.
$form->isValid && !$this->getUser()
затем перенаправить пользователя на страницу регистрации со значениями формы, сохраненными в сеансе?$form->isValid()
Я запутался, я должен сохранить значения формы в сеансе и перенаправить? это сохранит значения модели должным образом?
Также, как мне перенаправить пользователя на страницу регистрации, сказав Symfony вернуться на ту же страницу с методом post после входа в систему.
Я думаю, что вы должны следовать этой структуре:
Случай : После отправки формы страницы перенаправьте на страницу регистрации / входа.
1.) Заполните форму и после отправки формы преобразуйте данные в массив сериализации. Вот.
2.) вставить этот сериализованный массив в скрытые поля или сеанс (страница регистрации / входа).
3.) заполните регистрационную форму, после регистрации отправьте обратно на предыдущую страницу формы и отправьте скрытые данные на эту страницу и отмените их сериализацию. Вот
Предложение : Если вы хотите, чтобы ваши данные не отображались на странице, вы можете использовать функцию urlencode и urldecode или любой другой метод кодирования, который вы можете использовать.
Замечания : Использование сеанса или файла cookie для отправки данных поста с одной страницы на другую страницу является плохой практикой. Это будет на всех страницах, пока вы не удалите / удалите его.
перенаправить на страницу входа с контроллера вручную, используйте следующее:
$session->set('_security.user_firewall.target_path', $request->getUri());
throw new AuthenticationException(); // use Symfony\Component\Security\Core\Exception\AuthenticationException;
перенаправление со страницы регистрации, используйте следующее:
$key = '_security.user_firewall.target_path'; #where "user_firewall" is your firewall name
//check if the referrer session key has been set
if ($this->container->get('session')->has($key))
{
//set the url based on the link they were trying to access before being authenticated
$url = $this->container->get('session')->get($key);
//remove the session key
$this->container->get('session')->remove($key);
}
// if the referrer key was never set, redirect to a default route
else{
$url = $this->generateUrl($routeName);
}
return new RedirectResponse($url);
Для меня самое простое решение — разместить обе страницы в виде div на одной странице и использовать javascript, чтобы скрыть неподтвержденную форму, чтобы вам не нужно было хранить и повторно заполнять значения.