Я запускаю веб-приложение на основе Symfony 2.8
, которое использует FOSUserBundle
для обработки пользователей.
Маршруты FOSUserBundle
импортируются с использованием текущей локали в качестве префикса:
// app/config/routing.yml
...
# fos_userbundle
user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix: "/{_locale}/user"
Это отлично работает.Если пользователи создают новую учетную запись с помощью веб-браузера, ссылка для подтверждения электронной почты создает текущую локаль, например, 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);
Вопрос: Как указать маршрутизатору использовать правильную локаль?