Я ищу часы, и я не нашел действительно, как мы можем переопределить шаблон входа для пользователя и администратора.
Я создал брандмауэр администратора в security.yml
firewalls: admin: pattern: /admin(.*) form_login: provider: fos_userbundle csrf_provider: form.csrf_provider login_path: /admin/login check_path: /admin/login_check default_target_path: /admin logout: path: /admin/logout target: / anonymous: true access_control: - { path: ^/admin/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/logout$, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/login_check$, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin, roles: ROLE_ADMIN } - { path: ^/.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }
Теперь я хочу создать форму входа.
Как я понимаю, мы должны создать действие для входа (потому что если мы не symfony2 не выбрасываем исключение маршрута).
Маршрутизация для входа администратора:
admin_login: pattern: /admin/login defaults: { _controller: CSCommonBundle:Admin/Default:login }
Контроллер для показа страницы входа:
public function loginAction() { return $this->render('CSCommonBundle:Admin/Login:login.html.twig'); }
И форма входа:
<form class="form-signin" action="/admin/login_check" method="post"> <h2 class="form-signin-heading">Giriş Yapın</h2> <div class="login-wrap"> <input type="text" name="_username" id="username" class="form-control" placeholder="{% trans %}Kullanıcı Adı{% endtrans %} / {% trans %}E-Posta{% endtrans %}" autofocus> <input type="password" name="_password" id="password" class="form-control" placeholder="{% trans %}Şifre{% endtrans %}"> <label class="checkbox"> <input type="checkbox" id="remember_me" name="_remembe_me" value="on"> Beni Hatırla </label> <button class="btn btn-lg btn-login btn-block" type="submit">{% trans %}Giriş Yap{% endtrans %}</button> </div> </form>
Теперь у меня есть несколько вопросов;
Пожалуйста, объясните мне это. Я потерялся и застрял в этом.
Я настоятельно рекомендую вам правильно документировать документацию FOSUserBundle. Контроллер для визуализации вашего действия для входа должен быть FOSUserBundle SecurityControlle loginAction. Это позволит корректно обрабатывать вход в систему с точки зрения безопасности, а также будет обрабатывать ваши сообщения об ошибках входа в систему.
1. Я считаю, что FOSUserBundle использует флэш-сообщения для ошибок входа, поэтому вам нужно будет реализовать это в своем шаблоне.
2. Я бы рекомендовал проверить документацию FOS, они излагают, как именно создать новую форму для использования вместо своей формы. https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_templates.md
3. Да, вы можете. Я сделал это в прошлом, расширив FOSUserBundle SecurityController по умолчанию и переопределив метод renderLogin (). https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Controller/SecurityController.php . Это позволит вам указать разные шаблоны входа. Например, вы можете добавить чек, чтобы узнать, к какому маршруту идет пользователь:
protected function renderLogin(array $data) { // get target path if ( $this->getSession()->get( '_security.main.target_path' ) ) { $targetPath = $this->getSession()->get( '_security.main.target_path' ); } else { $targetPath = $this->get('router')->generate( 'default_route' ); } $template = 'AcmeBundle:Security:loginOne.html.twig'; // if admin if( strstr( $targetPath, '/admin' ) !== false ) { $template = 'AcmeBundle:Security:loginTwo.html.twig'; } return $this->container->get('templating')->renderResponse($template, $data); }
Я бы рекомендовал использовать основную форму и использовать блоки Twig, которые вы можете переопределить во всех своих других формах входа, таким образом, вы меняете только внешний вид формы, а не всю разметку формы. Если вы добавите контроллер безопасности, вам может понадобиться повторно создать маршруты входа в Ресурсы / config / routing / security.xml, чтобы использовать его.
4. Да, это нормально, но для этого есть маршруты. Я бы не стал жестко закодировать ваш путь login_check в форме, но создать маршрут и сгенерировать его. Для клиента это тот же URL-адрес, но его будет легче поддерживать. Маршрут FOS по умолчанию для проверки – «fos_user_security_check». Вы также должны использовать маршрут в файле security.yml вместо hardcoding пути. Таким образом вы можете изменить путь, просто изменив маршруты.
Это должно позволить вам использовать разные шаблоны для входа администратора и входа в интерфейс без повторного создания всей формы и контроллера безопасности. Пусть FOS управляет безопасностью, просто расширьте и переопределите то, что вам нужно.