私は同様の問題を抱えていて、それを理解しました。
$e->getRouter()->setDefaultParam('lang', 'de_DE');
リスナーを使用して MvcEvent::EVENT_DISPATCH (以下の更新メモを参照) でこれをトリガーしていますが、onBootstrap も機能するModule.php
はずです。
アップデート:
OK、ルーターにデフォルトのパラメーターを適用するにMvcEvent::EVENT_DISPATCH
は遅すぎることがわかりました。特に、ルートを介して言語を渡すだけでなく、翻訳可能なルートを (と組み合わせて'router_class'=>'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack'
) 使用することにも関心がある場合。
したがって、MvcEvent::EVENT_ROUTE にある必要があります。
// applying a default language param to route
$e->getRouter()->setDefaultParam('lang', 'de_DE');
// Now detect the requested language or retrieve
// from matched route
// $detectedLocale =...
// ...
// Retrieve the translator
$sm->get('translator');
// Apply detected locale to the translator
$translator->setLocale($detectedLocale);
// and now this apply the translator to the router
// for translatable routes
$e->getRouter()->setTranslator($translator);
// but don't forget about
// 'router_class'=>'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack'
// for translatable routes
でこれを行うべきだと言っている人がいますonBootstrap()
が、IMVHOは、ルート/URL パラメーターでクライアントから渡されたロケール/言語を検出するために必要な をonBootstrap
取得するのが早すぎます。matched route
「ロケールを検出する」と言うことで、URL/クエリ文字列でのダーティな文字列操作についてはまったく考えていませんgetParam()
。一致したルートのクリーンについて考えています。
関連:
http://framework.zend.com/manual/2.2/en/modules/zend.mvc.mvc-event.html