Я пытаюсь перенаправить, если пользователь не вошел в систему (работает с FOSUser и SonataAdmin) и вызывает либо http://domain.com/app_dev.php
(dev), либо http://domain.com
(prod), то я хочу в обоих случаях перенаправить на /login
, поэтому я написал эту конфигурацию в app/routing.yml
:
root:
path: /
defaults:
_controller: FrameworkBundle:Redirect:urlRedirect
path: /login
permanent: true
Это работает, но у меня проблема, так как у меня есть это в контроллере:
/**
* @param Request $request
*
* @return array
* @Route("/", name="brand")
* @Method("GET")
* @Template()
*/
public function indexAction(Request $request)
{
....
}
Затем, когда я пытаюсь вызвать маршрут brand
, например, используя ссылку типа: http://domain.com/app_dev.php/?email=7x-xRFClkjw
(dev) или http://domain.com/?email=7x-xRFClkjw
(prod), меня перенаправляют на /login
. Моя лучшая идея - изменить мой код на это:
/**
* @param Request $request
*
* @return array
* @Route("/bp", name="brand")
* @Method("GET")
* @Template()
*/
public function indexAction(Request $request)
{
....
}
А затем перенаправить с помощью маршрута на новый /bp
вместо /
для этой функции (главным образом это связано с тем, что у пользователей уже есть тонны электронных писем, в которых есть ссылки, как ранее опубликованные, и я не могу это изменить). Но я понятия не имею, как написать это правило в routing.yml
, потому что если бы я написал это:
bp:
path: /
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: brand
permanent: true
Я закончу с циклом перенаправления. Я также мог бы изменить способ настройки маршрута по умолчанию к /login
, но я просто не могу найти нужную документацию. Основная идея этого поста — настроить маршрут по умолчанию для /
. Может ли кто-нибудь помочь мне в этом?
В качестве дополнительной информации это часть моего файла security.yml
:
firewalls:
...
admin_area:
pattern: ^/
anonymous: ~
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
# the user is redirected here when they need to log in
login_path: /login
# submit the login form here
check_path: /login_check
# login success redirecting options (read further below)
always_use_default_target_path: true
default_target_path: /admin/dashboard
target_path_parameter: _target_path
use_referer: false
failure_path: /admin/dashboard
failure_forward: false
logout:
path: /logout
ОБНОВЛЕНИЕ
На самом деле код от @emmanuel-hdz-díaz дает мне еще одну идею, и мне не нужно создавать прослушиватель ядра или добавлять много кода, просто сделав это на моем контроллере:
if ($request->query->get('email')) {
...
} else {
return $this->redirect($this->generateUrl('sonata_user_admin_security_login'));
}
Мне удалось перенаправить пользователя на маршрут /login
.