ユーザーがログインしておらず (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)
{
....
}
次に、例のように(dev) または(prod)brand
のようなリンクを使用してルートを呼び出そうとすると、にリダイレクトされました。私の最善のアイデアは、コードを次のように変更することです。http://domain.com/app_dev.php/?email=7x-xRFClkjw
http://domain.com/?email=7x-xRFClkjw
/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
ルートにリダイレクトできました。