2017-01-18 16 views
4

に指定しなくても、私は成功し、次のルートアクセスできるように、私はsymfonyのlocaleオプションを設定したいと思います:現在symfonyのデフォルトロケールURL

/route 
/{locale}/route 

を私は/{locale}/routeにアクセスすることができ、私はしかし、私の見解を取得し、 /routeNo route found for "GET /route"を返します。次のように私の構成は次のとおりです。

#app/config/parameters.yml 
parameters: 
    locale: en 

#app/config/config.yml 
parameters: 
    app_locales: en|fr 
framework: 
    translator: { fallback: "%locale%" } 
    default_locale: "%locale%" 

#app/config/routing.yml 
app: 
    resource: '@AppBundle/Controller/' 
    type: annotation 

私のコントローラは、次の注釈があります

#src/AppBundle/Controller/Admin/MyController.php 
/** 
* 
* @Route(
*  "/{_locale}/admin/my", 
*  defaults={"_locale":"%locale%"}, 
*  requirements={"_locale":"%app_locales%"} 
* ) 
*/ 
class MyController extends Controller 
{ 
    /** 
    * @Route("/", name="admin_my_list") 
    * @Method("GET") 
    */ 
    public function listAction() 
    { 
     ... 
    } 
} 

私は、具体的locale、そのすべての作品が含まれている場合。 localeを除外すると、No route foundというエラーが発生します。

+1

次のパターンは当てはまりません。 '/ route'と'/locale/route'は 'en'または' fr'として定義された '_locale'の要件に基づいてマッチする2つの異なるルートです。デフォルトの '_locale'を定義すると、ルートを生成し、' _locale'パラメータを省略するときに役立ちます。あなたが本当にやりたければ(そして私はそれを助言しません)、カスタムの 'RouteMatcher'を書くことができます。 –

答えて

3

あなたがあなたのルート定義を変更してみてください、提供ロケールせずにシナリオをカバーするために、別のルートを定義する必要があります。

#src/AppBundle/Controller/Admin/MyController.php 

class MyController extends Controller 
{ 
    /** 
    * @Route(
    *  "/admin/my", 
    *  defaults={"_locale":"%locale%"}, 
    * ) 
    * @Route(
    *  "/{_locale}/admin/my", 
    *  requirements={"_locale":"%app_locales%"} 
    * ) 
    * @Method("GET") 
    */ 
    public function listAction() 
    { 
     ... 
    } 
} 
+0

'Controller'クラスレベルで複数のルートを適用することはできませんが、これを' Action'に適用することができます。 – Unflux

+0

Thx、@Unflux私はそれに応じて私の答えを更新しました – lordrhodos

0

私はボリスがアップコメント何に同意します。私の意見で

RouteMatcherを作るについての代替ソリューションは、イベントリスナーを使用してsame route with the default Localeにユーザーをリダイレクトすることである(より多くのupvotesを持って答えを確認してください)

AthlanのようなのEventListenerでこれを行うには、移動するための方法があります説明しました。私はあなた自身のRouteMatcherを作っていません。 lordrhodosが書いたものを見て、コントローラーの注釈にこのような2つのルートを入れようとしたことはありませんでしたが、コントローラーが1つしかない場合は移動する方法だと思います。イベントリスナーがたくさんある場合は、EventListenersを使用して1か所だけでこれを行うときれいになるかもしれません。

関連する問題