Я следил за учебником это о том, как создать форму входа в Symfony 3, и все работает нормально.
Однако я бы хотел использовать одну и ту же форму входа на нескольких страницах («/» и «/ login»). К сожалению, я всегда могу заставить работать только одну из этих страниц в зависимости от того, как я настраиваю "login_path" и "check_path" в security.yaml.
Так что либо
form_login:
login_path: login
check_path: login
или же
form_login:
login_path: /
check_path: /
Я попытался добавить еще один брандмауэр специально для страницы входа, чтобы использовать оба сразу, но безуспешно, моя форма в / login могла бы тогда отправляться и перенаправлять на default_target_path, но пользователь не входил в систему. Я Мы также пытались установить переменную action в функции createForm в контроллере, чтобы форма входа отправлялась в / login даже на странице индекса, но это тоже не сработало.
Есть идеи, как решить эту проблему?
Я использовал конструктор, так как планировал использовать форму на нескольких страницах: class LoginForm extends AbstractType {public function buildForm (FormBuilderInterface $ builder, array $ options) {$ builder -> add ('_ username', TextType :: class, array ('label' => 'Uživatelské jméno')) -> add ("_ password", PasswordType :: class, array ('label' => 'Heslo')) -> add ('Odeslat', SubmitType :: class) ; }}






Вы пробовали создать вторую запись с другим именем? Не уверен, что это сработает, но технически разные провайдеры с разными именами разрешены. И нет никаких требований, чтобы у них действительно были разные поставщики или разные реализации.
security:
# ...
firewalls:
main:
# ...
form_login:
login_path: login
check_path: login
alternative
# ...
form_login:
login_path: /
check_path: /
Как я уже упоминал, я пытался сделать это, и это привело к отправке обеих форм, но вторая на самом деле не входила в систему. Однако после дополнительных поисков я обнаружил, что это связано с тем, что два брандмауэра не имеют одного и того же контекста безопасности, поэтому решением было добавить «context: some_context_name» к параметрам обоих брандмауэров в security.yaml
Вы можете перенаправить пользователя на страницу входа, если он не вошел в систему.
//Assuming this is the action for the "/" route
public function indexAction($name)
{
//If not logged in
if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
return $this->redirectToRoute('/login');
}
...//If logged in
}
Вы могли бы просто отобразить страницу входа, а не перенаправлять.
Я мог, но это было не совсем то, что я хотел сделать, я хотел отобразить форму входа на обеих этих страницах.
Похоже, вы хотите пойти по маршруту, упомянутому А.С.Оливьери. Глядя на комментарии, похоже, что у вас это работает. Вы должны принять его ответ, если это так.
Можете ли вы поделиться своим кодом формы входа? Это простая HTML-форма или вы использовали конструктор форм Symfony?