所以我在Controller中有这个:
/**
* @Route("/", name="home", defaults={"_locale": "%locale%"})
* @Route("/{_locale}", name="home_locale", defaults={"_locale": "%locale%"}, requirements={"_locale": "\w{2,3}"})
*
* @param Request $request
*
* @return Response
*/
public function indexAction(Request $request)
{
return $this->render('@Base/Default/index.html.twig');
}
/**
* @Route("/{_locale}/welcome", name="welcome", defaults={"_locale": "%locale%"}, requirements={"_locale": "\w{2,3}"})
*
* @param Request $request
*
* @return RedirectResponse|Response
*/
public function loginAction(Request $request)
{
$loggedUser = $this->getUser();
$locale = $request->getLocale();
if ($loggedUser instanceof User) {
return $this->redirect($this->generateUrl('home', ['_locale' => $locale]));
}
$error = $this->get('security.authentication_utils')->getLastAuthenticationError();
$loginForm = $this->createForm(LoginType::class, null, ['action' => $this->generateUrl('welcome', ['_locale' => $locale]), 'method' => 'POST']);
$user = new User();
$registrationForm = $this->createForm(UserRegistrationType::class, $user, ['action' => $this->generateUrl('register'), 'method' => 'POST']);
return $this->render(
'@Base/Default/login.html.twig',
[
'error' => $error,
'loginForm' => $loginForm->createView(),
'registerForm' => $registrationForm->createView()
]
);
}
这在安全方面:
encoders:
BaseBundle\Entity\User: bcrypt
# http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
providers:
database_users:
entity: { class: BaseBundle:User, property: username }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
anonymous: ~
guard:
authenticators:
- base.security.login_form_authenticator
logout:
path: /logout
access_control:
- { path: ^/%locales%/welcome, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/%locales%/register$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/*, roles: ROLE_USER }
参数中的语言环境是这样的:
locale: ro
locales: ro|en
警惕重定向的功能是:
/**
* @return mixed
*/
protected function getLoginUrl()
{
/** @var RequestContext $locale */
$requestContext = $this->router->getContext();
$locale = $requestContext->getParameter('_locale');
return $this->router->generate('welcome', ['_locale' => $locale]);
}
/**
* @return mixed
*/
protected function getDefaultSuccessRedirectUrl()
{
/** @var RequestContext $locale */
$requestContext = $this->router->getContext();
$locale = $requestContext->getParameter('_locale');
return $this->router->generate('home', ['_locale' => $locale]);
}
接下来是场景,左边是路径,右边是正在发生的事情:
/ -> i am redirected to /ro/welcome witch is correct
/en -> i am redirected to /en/welcome witch is also correct
/ro/welcome -> is working
/en/welcome -> is working
/ro -> i am NOT redirected to /ro/welcome witch is NOT good
在我登录而不是保留locale ro后,我被重定向到en,如果我尝试访问/ en / welcome登录,我将被重定向到/?_ locale = en(显示ro转换,因此无法正常工作)而不是/ EN
有谁知道为什么会这样?
答案 0 :(得分:0)
我发现问题,在安全性而非path: ^/%locales%/welcome
核心路径为path: ^/(%locales%)/welcome