コアポイント
この記事は、コントローラー構成の便利な代替品を導入することを目的としており、注釈の必須の方法ではありません。最良のアプローチは、特定のシナリオ要件に依存します。
Symfony 2は、強力な組み込みコンポーネントを使用してアプリケーション用のすべてのルーティングを管理しています:ルーティングコンポーネント。基本的に、ルートはURLをコントローラーアクションにマッピングします。 Symfonyはモジュール式になるように設計されているため、ファイルはこれに特別にセットアップされています:
にあります。
routing.yml
app > config > routing.yml
注釈を使用してルートを定義する方法を理解するには、簡単なブログアプリケーションを例に取りましょう。
ステップ1:ホームページルートを作成します
パスをの操作にリンクします。
注釈方法 /
HomeController
in
in
:
app/config/routing.yml
blog_front_homepage: path : / defaults: { _controller: BlogFrontBundle:Home:index }
ルーティング構成を宣言します。コントローラー自体は、特別な設定を必要としません。 src/Blog/FrontBundle/Controller/HomeController.php
<?php namespace Blog\FrontBundle\Controller; class HomeController { public function indexAction() { //... 创建并返回一个 Response 对象 } }
in routing.yml
:blog_front_homepage
in :
app/config/routing.yml
センター:
resource
コントローラーを指定してtype
ルートを宣言する方法を定義しますprefix
コントローラークラスのすべての操作のプレフィックスを定義します(オプション)。 use SensioBundleFrameworkExtraBundleConfigurationRoute;
@Route("/", name="blog_homepage")
「ルーティングレイヤーでコントローラーを上書きする方法を知っているので、少なくとも同じ結果を得るには、より多くのコードが必要です。」
注釈方法
in
:
app/config/routing.yml
blog_front_homepage: path : / defaults: { _controller: BlogFrontBundle:Home:index }
src/Blog/FrontBundle/Controller/HomeController.php
<?php namespace Blog\FrontBundle\Controller; class HomeController { public function indexAction() { //... 创建并返回一个 Response 对象 } }
in :
in app/config/routing.yml
:
blog_front: resource: "@BlogFrontBundle/Controller/" type: annotation prefix: /
注:src/Blog/FrontBundle/Controller/HomeController.php
変更は必要ありません。これで、どの操作がルーティングモードから呼び出されているかを見ることができます。
<?php namespace Blog\FrontBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class HomeController { /** * @Route("/", name="blog_home_index") */ public function indexAction() { /* ... */ } }
などのコントローラー内のすべての操作をプレフィックスする必要がある場合は、routing.yml
キーを
を追加できます。 >
/admin
in routing.yml
:prefix
@Route
:app/config/routing.yml
blog_front_homepage: path : / defaults: { _controller: BlogFrontBundle:Home:index } blog_front_article: path : /article/{slug} defaults: { _controller: BlogFrontBundle:Home:showArticle }
ステップ3:追加のルーティング構成src/Blog/AdminBundle/Controller/AdminController.php
<?php // namespace & uses... class HomeController { public function indexAction() { /* ... */ } public function showArticleAction($slug) { /* ... */ } }
urlデフォルトパラメーターを設定
化学:。
プレースホルダーは、defaults = { "key" = "value" }
キーに
blog_front: resource: "@BlogFrontBundle/Controller/" type: annotation prefix: /
パラメーターの値はslug
に設定されます。また、urldefaults
は、{slug}
パラメーターの値を/article
に一致させて設定します。 slug
hello
/blog/world
要件を追加page
world
。
の値を明確に定義できます。次の例では、数字でまったく同じことを行います。
requirements = { "key" = "value" }
<?php // namespace & uses... class HomeController { /** * @Route("/", name="blog_home_index") */ public function indexAction() { /* ... */ } /** * @Route("/article/{slug}", name="blog_home_show_article") */ public function showArticleAction($slug) { /* ... */ } }
slug
を施行します
{slug}
化学:
blog_front: ... blog_admin: resource: "@BlogAdminBundle/Controller/" type: annotation
blog_front_homepage: path : / defaults: { _controller: BlogFrontBundle:Home:index }
着信要求の方法(Get、Post、Put、Deleteなど)に応じて一致させることもできます。メソッドが指定されていない場合、ルートは任意の方法と一致することに注意してください。
httpソリューション
を施行します化学:schemes = { "protocol" }
。
<?php namespace Blog\FrontBundle\Controller; class HomeController { public function indexAction() { //... 创建并返回一个 Response 对象 } }
この場合、HTTPSプロトコルを介してルートにアクセスされるようにします。
HostName
を執行します化学:host = "myhost.com"
。
blog_front: resource: "@BlogFrontBundle/Controller/" type: annotation prefix: /
HTTPホストに基づいて一致させることもできます。これは、ホストがmyblog.com
の場合にのみ一致します。
ステップ4:練習
AdminController.php
で記事を削除するために正しいルートを作成する必要があると仮定して、信頼できるルーティング構造を構築できます。必要なのは
/admin/delete/article/{id}
を定義します
blog_admin_delete_article
id
最終的な考え
<?php namespace Blog\FrontBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; class HomeController { /** * @Route("/", name="blog_home_index") */ public function indexAction() { /* ... */ } }
ご覧のとおり、注釈を使用したルーティングを管理することは簡単に書き込み、読み取り、維持できます。また、コントラクラスの1つのファイルにコードと構成の両方を集中させるという利点もあります。 注釈または標準構成を使用していますか?どちらが好きですか、そしてその理由は何ですか?
symfony2ルーティングアノテーションFAQ(FAQ)(コンテンツのこの部分は擬似オリジナルの目標と一致せず、長すぎるため、FAQの部分はここで省略されています。
以上がSymfony2ルートアノテーションを開始しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。