私は1つの解決策を見つけました。これは最善の解決策ではありませんが、機能します
私のホームページで
ホームページコントローラー
パブリック関数 indexAction()
{
$request = $this->get('request');
/**
* ユーザー言語をセッションに保存します
*/
$sessionId = $this->get("セッション");
if($sessionId->get("lingua")==""){
$this->get('session')->set('lingua', $request->getLocale());
}
配列を返す();
}
上書きされた FOSUserBundle の他のバンドル
UserBundle/Controller/RegistrationController.php (例)
パブリック関数 customAction() {
/**
* ユーザー言語をセッションに保存します
*/
$sessionId = $this->container->get("セッション");
if($sessionId->get("lingua")==""){
$this->container->get("session")->set('lingua', $this->container->get('request')->getLocale());
}
配列を返します(
);
}
次に、次のようなサービスを作成します: http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html
サービス.xml
サービス:
acme_locale.locale_listener:
クラス: Acme\LocaleBundle\EventListener\LocaleListener
引数: ["%kernel.default_locale%",@session]
タグ:
- { 名前: kernel.event_subscriber }
LocaleListener
名前空間 Acme\LocaleBundle\EventListener;
Symfony\Component\HttpKernel\Event\GetResponseEvent を使用します。
Symfony\Component\HttpKernel\KernelEvents を使用します。
Symfony\Component\EventDispatcher\EventSubscriberInterface を使用します。
Symfony\Component\HttpFoundation\Session を使用します。
クラス SnLocaleListener は EventSubscriberInterface を実装します
{
プライベート $defaultLocale;
プライベート $ セッション;
public function __construct($defaultLocale = 'it', $session)
{
$this->defaultLocale = $defaultLocale;
$this->session = $session;
}
公開関数 onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
戻る;
}
// incapsula la lingua in sessione se esiste
$locale_session = $this->session->get('lingua');
if ($locale_session == "") {
// prova a vedere se il locale sia stato impostato come parametro _locale di una rotta
if ($locale = $request->attributes->get('_locale')) {
$request->getSession()->set('_locale', $locale);
} そうしないと {
// se non trova un locale esplicito in questa richiesta, usa quello della sessione
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}
} そうしないと {
$request->setLocale($request->getSession()->get('_locale', $locale_session));
$request->getSession()->set('_locale', $locale_session);
$request->attributes->set('_locale', $locale_session);
}
}
public static function getSubscribeEvents()
{
配列を返します(
// deve essere registrato prima dell'ascoltatore predefinito di locale
KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
);
}
}
申し訳ありませんが、私の英語は完璧ではありません..私にとってこの解決策はうまくいきます。それは最善ではありません