私は Symfony2 を使用しており、サイトに多言語サポートを追加したいと考えていました。バンドル symfony/symfony があります。ただし、ロケール変数の設定についてドキュメントに記載されているとおりにすると。次のエラーが表示されます。私のクラスは次のようになります
<?php
// src/AppBundle/EventListener/LocaleListener.php
namespace AppBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class LocaleListener implements EventSubscriberInterface
{
private $defaultLocale;
public function __construct($defaultLocale = 'en')
{
$this->defaultLocale = $defaultLocale;
}
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
return;
}
if ($locale = $request->attributes->get('_locale')) {
$request->getSession()->set('_locale', $locale);
} else {
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}
}
static public function getSubscribedEvents()
{
return array(
// must be registered before the default Locale listener
KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
);
}
}
そしてservice.yml
app.locale_listener:
class: AppBundle\EventListener\LocaleListener
arguments: ['%kernel.default_locale%']
tags:
- { name: kernel.event_subscriber }`
これを解決する方法について提案がある場合は、喜んで聞いてください。
編集: 問題を修正しました。しばらくして、クラスがベンダー フォルダーの別の場所に既に存在していることに気付きました。そのクラスは機能し、私のものと同じように見えました。だから私は私のコードを挿入し、それを解決しました。