4

/ExplicitControllerName/ExplicitActionToRunに基づいて定義したもの以外のすべての URL 呼び出しが実行されるようにしたい場合、ルーティングはどのように見えるでしょうか。

たとえば、いくつかの擬似コード:

default_pathing:
    pattern:  /{controller}/{action}
    defaults: { _controller: Bundle:Default:index }

www.example.com/Page/Aboutにアクセスすると

それは私のコントローラを呼び出すでしょう

class Page extends Controller
{
    public AboutAction()
    {
        // Called by above URL
    }
}

この質問は答えません: Symfony2 / ルーティング / パラメータをコントローラまたはアクション名として使用

毎回ほぼ同じルーティングを行う多数のサブ ルーティング ページを含む 100 ページがあるとします。100 個のコントローラーすべてに対して 1 つのルーティングを実行したいと考えています。どうすればこれを行うことができますか?

PS私は本当にC#.NET MVC 4.0ルーティングのようなものに行きます。これにより、少なくとも開発用であっても、一般的なセットアップのルーティングを設定できます

4

2 に答える 2

2

あなたの質問は完全に明確ではありませんが、ここにいくつかのヒントがあります。

あなたが解決しようとしている 2 つの使用例を想像できます。

1) about の例のように、ある種の CMS ページがたくさんあります。これらのページには多くのロジックがなく、いくつかのビューをレンダリングするだけです。そのような場合は、次のようになります。

class CMSPageController
{
    public function renderPage($pageSlug)
    {
        $page = $this->cmsPageRepository->findBySlug($pageSlug);

        // your logic to render the view
    }
}

そして、それに応じたルーティング構成:

<route id="cms_page_view" pattern="/cms/{pageSlug}">
  <default key="_controller">cms_page.controller.page:renderPage</default>
  <requirement key="_method">GET</requirement>
  <requirement key="slug">[0-9a-zA-Z\-\.\/]+</requirement>
</route>

2) はるかに複雑な要件があるか、特定のパターンに従ってコントローラー/アクションに名前を付けるため、カスタムUrlMatcherInterface実装を作成する必要があります。ネイティブ実装を見て、どこから始めればよいかを理解してください。これにより、フォールバックを定義できます。

于 2013-10-08T13:58:56.360 に答える
0

これは、クラスレベルおよびメソッドレベルで SensioFrameworkExtraBundle の@Routeアノテーションを過度に使用して実現できます...

... または、暗黙的なリソース名を使用した FOSRestBundle の自動ルート生成を使用して、より少ない注釈でよりエレガントにします。おそらく、FOSRestBundle の手動ルート定義注釈の一部を使用して、生成されたルートの一部を修正する必要があります。

どちらの方法でも、ルート リソースを に明示的に追加する必要がありますapp/config/routing.yml

@Route のインポート例

# import routes from a controller directory
blog:
    resource: "@SensioBlogBundle/Controller"
    type:     annotation

FOSRestBundle のインポート例

users:
    type:     rest
    resource: Acme\HelloBundle\Controller\UsersController

次の方法で、すべてのリソースをインポートする必要があることを回避できます。

何百ものコントローラーを使用する予定がなく、コンパイラ パスやカスタム アノテーションなどの経験があまりない場合は、リソースをルーティング構成に登録するだけで間違いなく高速になります。

于 2013-10-08T20:18:35.940 に答える