Форма входа в Symfony 3 на нескольких контроллерах

Я следил за учебником это о том, как создать форму входа в 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 даже на странице индекса, но это тоже не сработало.

Есть идеи, как решить эту проблему?

Можете ли вы поделиться своим кодом формы входа? Это простая HTML-форма или вы использовали конструктор форм Symfony?

Dylan Pierce 05.04.2018 18:40

Я использовал конструктор, так как планировал использовать форму на нескольких страницах: 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) ; }}

alas 05.04.2018 18:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
228
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы пробовали создать вторую запись с другим именем? Не уверен, что это сработает, но технически разные провайдеры с разными именами разрешены. И нет никаких требований, чтобы у них действительно были разные поставщики или разные реализации.

security:
    # ...

    firewalls:
        main:
            # ...
            form_login:
                login_path: login
                check_path: login
        alternative
            # ...
            form_login:
                login_path: /
                check_path: /

Как я уже упоминал, я пытался сделать это, и это привело к отправке обеих форм, но вторая на самом деле не входила в систему. Однако после дополнительных поисков я обнаружил, что это связано с тем, что два брандмауэра не имеют одного и того же контекста безопасности, поэтому решением было добавить «context: some_context_name» к параметрам обоих брандмауэров в security.yaml

alas 05.04.2018 20:49

Вы можете перенаправить пользователя на страницу входа, если он не вошел в систему.

//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
}

Вы могли бы просто отобразить страницу входа, а не перенаправлять.

Я мог, но это было не совсем то, что я хотел сделать, я хотел отобразить форму входа на обеих этих страницах.

alas 05.04.2018 21:33

Похоже, вы хотите пойти по маршруту, упомянутому А.С.Оливьери. Глядя на комментарии, похоже, что у вас это работает. Вы должны принять его ответ, если это так.

Shawn Northrop 05.04.2018 23:02

Другие вопросы по теме

Я изменил несколько вещей, и мой php перенаправляет меня, говоря, что он не может обработать запрос
Форма Javascript Выберите Изменить параметры Ошибка динамического списка
Как получить значения из отключенных элементов управления формой в группе форм?
Как предотвратить перезагрузку страницы после отправки формы на PHP?
Я делаю проект сервлета в этом месте, я хочу выполнить проверку на стороне сервера с использованием карты в java? дайте мне пример?
Заполнители контактной формы моего веб-сайта не отображаются должным образом только на одном из наших компьютеров
Использование Access VBA для хранения первичного ключа объекта, выбранного в переменной
Выполнить функцию отправки jquery для определенной формы
Symfony 3.4 ChoiceType динамически добавляет варианты выбора
Шаблонные формы angular 5 обнаруживают изменение статуса действительности формы