2012-03-26 7 views
1

私はずっとSymfonyを使ってきましたが、私はSymfony2を初めて使っています。 MediaAreaと呼ばれるモジュールのための足場を生成するCRUDジェネレータを使用した後、私はこのルールを含めるように私のルーティングを編集した:私は、ブラウザでそのページを訪問したときSymfony2のDRY方法でルートを作成

_welcome: 
    pattern:/
    defaults: { _controller: VNNPressboxBundle:MediaArea:new } 

は、私はこのエラーを得た:

An exception has been thrown during the rendering of a template ("Route "mediaarea_create" does not exist.")

私はルートを作成すると、自然にエラーが消えます。 mediaarea_createmediaarea_indexなど - -

mediaarea_create: 
    pattern: /foo 
    defaults: { _controller: VNNPressboxBundle:MediaArea:create } 

は、だから私は手動で私が必要とするすべてのルートにを作成することもできますが、それはダムのようになります。ここではルートです。 Symfonyに、私がこれらのすべての作業をする必要があることを伝える方法はありますか?

+0

CRUDジェネレータによって生成された(そしてあなたのバンドルに配置された)ルートをメインのアプリケーションrouting.ymlファイルに添付しようとしていますか?あるいは、Symfonyに自動的に経路を引き継ぐようにしようとしていますか? – Shattuck

+0

あなたの最初の質問に答えるために、CRUDジェネレータがルートを全く生成していないという証拠は見つかりません。もしそうであれば、彼らが働いている限り、彼らはどこにいても気にしません。あなたの2番目の質問については、それがあればうまくいくかもしれませんが、私の主な目的はこの場合ルーティングを処理する "正しい"方法を見つけることです。 –

+0

src/{namespaceName}/{bundleName}/Resources/configフォルダに、生成されたルートがないかチェックします。何もない場合は、ルートを手動で作成する必要があります。 symfonyに自動的に作成させる方法があります。私は100%FOSRestBundleを使用せずにこれを行う方法を確信していません:https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Routing/Loader/RestRouteLoader.php、しかしあなたは彼らのバンドルを見てみることができます彼らがどのようにそれをしたかを見てください – Shattuck

答えて

1

EDIT:OK、質問にお答えできないことがあり、それは

はなぜ代わりに注釈を abstract ベースコントローラを使用していない...だけ長いコメントですか?あなたのサブクラスが 異なる振る舞いが必要な場合は

abstract class AbstractCrudController extends Controller 
{ 

    /** 
    * @Route("/show/{slug}") 
    * @Method("GET") 
    * @Template 
    */ 
    public function showAction($slug) { /* Do stuff */ } 
} 

class MediaController extends AbstractCrudController { } 
class UserController extends AbstractCrudController { } 

あなたは常にshowAction()を上書きすることができますかしたい任意のアクションを追加します。その後、自動的にacme_hello_media_showacme_hello_user_showなり

somename1: 
    resource: "@AcmeHelloBundle/Controller/MediaController.php" 
    type: annotation 
    prefix: /media 

somename2: 
    resource: "@AcmeHelloBundle/Controller/UserController.php" 
    type: annotation 
    prefix: /user 

あなたのルート:次に、あなただけのあなたのrouting.yml(各コントローラに一つだけのインポート)でMediaControllerUserControllerをインポートする必要があります。デバッグ:

php app/console router:debug 
関連する問題