symfony - 如何在 Symfony 2.8 中手动设置路由器区域设置
问题描述
我正在运行一个用于处理用户的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)中创建新用户。这是通过将必要的数据(用户名、密码等)简单地发布到控制器来完成的,其中包括处理用户创建的控制器。
问题: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);
问题:如何告诉路由器使用正确的语言环境?
解决方案
将语言环境定义为路由生成器的参数:
$url = $this->router->generate(
'fos_user_registration_confirm',
array(
'token' => $user->getConfirmationToken(),
'_locale' => $userLocale,
),
UrlGeneratorInterface::ABSOLUTE_URL
);
推荐阅读
- sql - 查询 SQL Server 的求和结果
- list - 如何使用 findall/3 内联目标(仅使用一个谓词)?
- python - 单个函数的可变参数数量
- python - 使用前几天同一小时的平均值填充 NaN
- android - 我清除了我的 android studio 项目的缓存,现在我的项目没有运行
- mysql - 计算每年开始和结束日期之间的天数
- r - 为什么我在 R 中的预测函数没有考虑到数据的上升趋势
- mysql - 如何通过查询从组中获取基于最新日期的最高价格
- php - imap_fetchbody 函数不获取所有电子邮件
- powershell - Powershell脚本创建运行干净的mgr而不删除压缩文件