2012-03-05 21 views
1

symfony 2でダイナミックルートを設定する必要があります。ここで、slugパラメータはurlに追加され、データベースのページに関連しています。各ページには、独自のスラッグとそのコンテンツがデータベースに格納されています。記事Advanced Routingを読んでいますが、それはsymfonyの古いバージョンです。新しいバージョンの場合は、ParamConverterと同様の仕事をしているようです。これは教訓ベースのルーティングを実装する正しい方法ですか、本当のカスタムルータクラスを書くべきですか?doctrineに基づいたカスタムsymfonyルーティング

+0

動的ルートの意味を説明できますか? – Problematic

+0

確かに、私は、データベース内の各ページの内容を「url」として機能するテーブル内のスラッグ列と共に持つことを意味します。私はdomain.com/testテストの数字がスラッグでダイナミックです – Stefano

+0

あなたがスラッグについて話しているなら、あなたはSymfony2のドキュメント:http://symfony.com/doc/current/book/routingで必要なものをすべて手に入れてください。 html – Nanocom

答えて

6

私はParamConverterを使用します。はい。

// routing.yml 
foo_route: 
    pattern: /{slug}/ 
    defaults: { _controller: FooVendorBundle:Foo:view } 

// FooVendorBundle/Controller/FooController.php 
public function view(FooEntity $foo) 
{ 
    // $foo will be an instance of FooEntity 
} 

通常、中:つまり、それはルートのプレースホルダと同じ名前のフィールドでtypehintedオブジェクトをルックアップする方法を知っている - FrameworkExtraBundleに付属して最も簡単なケースを扱うことができ、デフォルトDoctrineParamConverterコントローラの引数リストには、$slugという変数があり、ルートによってキャプチャされた{slug}の内容からデータが取り込まれます。しかし、ParamConverterでは、あなたがFooEntityクラスを要求していることを認識し、キャプチャされたslug値でそのエンティティを見つけようとし、$foo変数にそのエンティティを設定しようとします。

デフォルトParamConverterは、もちろん、唯一実際にがエンティティにを存在するプロパティ調べることができることに制限されている:FooEntityはslugという名前のフィールドを持っていない場合、ルックアップは失敗し、例外がスローされますが。私が言ったように、これは基本的なユースケースの大半を処理します。リクエストパラメータの詳細な変換が必要な場合は、いつでも独自のパラメータを記述することができます。

+0

スラッグでも普通のページでも動的ページを処理する必要がある場合コントローラでは、各ページタイプ(静的および動的)を処理するカスタムルータクラスを使用する必要がありますか? – Stefano

+0

私はsymfonyを本当に愛し始めています。 +1 –

関連する問題