Symfony 2.1 から 2.2 にアップグレードしました。ここに記載されている指示に従いました:
http://symfony.com/blog/symfony-2-2-0
https://github.com/symfony/symfony/blob/2.2/UPGRADE-2.2.md
以前はすべてのコードが問題なく動作していましたが、アプリケーションで何かを実行しようとすると、フレームワークが URL に「_fragment」を挿入するという問題が発生しています。これにより、URL が次のように変更されます。
http://server/app_dev.php/en-GB/
に:
http://server/app_dev.php/_fragment/
これは twig によってロケールとして取得され、次のエラーで失敗します。
An exception has been thrown during the rendering of a template
("Circular reference detected when adding a fallback catalogue for locale "".")
in "/var/....../HomeBundle/Resources/views/Home/index.html.twig".
2/2 Twig_Error_Runtime: An exception has been thrown during the rendering of a template
("Circular reference detected when adding a fallback catalogue for locale "".")
in "/var/...../HomeBundle/Resources/views/Home/index.html.twig"
1/2 LogicException: Circular reference detected when adding a fallback catalogue for locale "".
バックトレースの一部は次のように述べています。
DEBUG - Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelException".
DEBUG - Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ExceptionListener::onKernelException".
CRITICAL - Uncaught PHP Exception Twig_Error_Runtime: "An exception has been thrown during the rendering of a template ("Circular reference detected when adding a fallback catalogue for locale "".") in "/var/...../HomeBundle/Resources/views/Home/index.html.twig"." at /var/...../app/cache/dev/classes.php line 6030
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
アプリケーションに初めてログインすると、すべて正常に動作しているように見えます。リクエストには、ロケールが次のようにリストされます。
_locale "en-GB"
_route "_home_index"
_route_params "Array(_locale => en-GB)"
ただし、別のリンク (同じページに戻ることを含む) をクリックすると、上記のエラーで失敗し、要求が次のように変更されます。
_locale "_fragment"
_route "_home_index"
_route_params "Array(_locale => _fragment)"
私のルーティング(上記の例の場合)は次のようになります。
Home_Home:
resource: "@HomeBundle/Controller/HomeController.php"
type: annotation
prefix: /{_locale}
defaults: { _locale: en }
私の設定:
framework:
translator: { fallback: en }
default_locale: en
問題はロケール処理ではなく、Symfony 2.2 に追加された新しいフラグメント サブ処理フレームワークにあると思います。おそらく、何らかの方法で呼び出されているか、アクティブ化されていますか? (または、ある種の構成がありません)。