【发布时间】:2018-11-14 15:44:04
【问题描述】:
我正在运行一个基于Symfony 2.8 的网络应用程序,它使用FOSUserBundle 来处理用户。
FOSUserBundle 路由是使用当前语言环境作为前缀导入的:
// app/config/routing.yml
...
# fos_userbundle
user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix: "/{_locale}/user"
这很好用。如果用户使用 Web 浏览器创建新帐户,则电子邮件确认链接将创建当前区域设置,例如https://example.com/XX/user/register/confirm/TOKEN
现在我添加了一个REST API,它允许从移动应用程序(iOS 和 Android)中创建新用户。这是通过简单的 POST 必要的数据(用户名、密码等)完成的,包括区域设置到控制器,然后处理用户创建。
问题:使用REST API 创建的用户始终使用默认区域设置(en)接收确认链接。
虽然手动设置区域设置可以正常生成正确语言的确认邮件,但它对确认链接没有影响:
public function registerAction(Request $request) {
$username = getDataFromRequest(...);
$userLocale = getDateFromRequest(...);
...
// Set locale manually
$translator->setLocale(userLocale);
$sessionLocale = $request->getSession()->set('_locale', userLocale);
$request->setLocale(userLocale);
...
$mailer = $this->get('fos_user.mailer');
$tokenGenerator = $this->get('fos_user.util.token_generator');
if (null === $user->getConfirmationToken())
$user->setConfirmationToken($tokenGenerator->generateToken());
$mailer->sendConfirmationEmailMessage($user);
...
}
我检查了sendConfirmationEmailMessage(...)的代码,它使用默认路由器生成确认链接:
$url = $this->router->generate('fos_user_registration_confirm', array('token' => $user->getConfirmationToken()), UrlGeneratorInterface::ABSOLUTE_URL);
问题:如何告诉路由器使用正确的语言环境?
【问题讨论】:
标签: symfony locale fosuserbundle symfony-routing