2016-08-19 10 views
1

に{から_locate}オプションを宣言し、私は、URLのこれらの種類をルーティングたいと思います:サイレックス2:ルーティング

/hello/{name} 
/en/hello/{name} 
/es/hello/{name} 

私は、このコントローラクラス作成しました:

<?php 

namespace Fw\Controllers; 

use Silex\Application; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Fw\Application as FwApplication; 

class Hello implements ControllerProviderInterface { 

    const URL_BASE = '/hello'; 
    const URL_BASE_LOCALE = '/{_locale}/hello'; 

    public function connect(Application $app) { 
     $controllers = $app['controllers_factory']; 

     $controllers 
       ->get('/{name}/', array($this, 'nameAction')) 
       ->bind('hello_name') 
     ; 

     return $controllers; 
    } 

    public function nameAction(FwApplication\ApplicationBase $app, Request $request, $name) { 
     return new Response('Hello ' . $name, 200); 
    } 
} 

をそして、それはこの中に登録されています方法:番目、/ EN /ハロー/ fooの:/こんにちは/ fooの しかし、これではない:

$app->mount(FwControllers\Hello::URL_BASE_LOCALE, new FwControllers\Hello()); 
$app->mount(FwControllers\Hello::URL_BASE, new FwControllers\Hello()); 

このURLは良い作品エラーが表示されます。

NotFoundHttpException RouterListener.php線125に:Noルートは

第二は、 "マウント" の文章があるようだ "/ GET/EN /ハロー/ foo" というため を認めませんでした最初のものに上書きされます。

誰でもこの問題を解決できますか?オプションの{_locale}でルーティングを設定するにはどうすればよいですか?

ありがとうございました。

答えて

0

私は同じ問題があり、すべてのルートにロケールを自動的に追加するサービスプロバイダを書きましたhttps://github.com/pmaxs/silex-locale。あなたの要求を満たすことができるかもしれません。

+0

あなたの素早い答えに感謝:)あなたのライブラリはうまく動作し、ほとんど私の要件を訴える。 1つのこと:使用可能な言語が "es"、 "en"の場合、読み込まれたURLがNotFoundHttpExceptionをスローする代わりに "/ fr/hello/foo"であり、デフォルト(/ en/hello/foo) "または"/hello/foo "? – cybtow

+0

{$ request-> getLocale()== 'fr'}のように、可能なロケールに 'fr'を追加してリダイレクトすることができます($ symfony- )redirect ...; }); ' –

+0

ありがとうございました! – cybtow