ホームページ > バックエンド開発 > PHPチュートリアル > Symfony2ルートアノテーションを開始します

Symfony2ルートアノテーションを開始します

William Shakespeare
リリース: 2025-02-19 13:24:16
オリジナル
858 人が閲覧しました

Getting Started with Symfony2 Route Annotations

コアポイント

  • Symfony2のSensioframeworkextrabundleを使用すると、開発者は注釈を使用してコントローラーに直接構成をルーティングし、便利な代替手段を提供します。
  • Symfony2でのルーティング注釈のルーティングは、ルーティング構成をよりモジュール化し、各ルートは対応するコントローラー操作で直接定義され、コードの理解と保守を容易にします。
  • アノテーションにより、URLデフォルトパラメーターの設定、要件の追加、HTTPメソッドまたはスキームの実施、ホスト名の実施など、詳細なルーティング構成が可能になります。
  • アノテーションを使用すると、ルーティング構成が含まれるため、コントローラー操作がより複雑になる場合がありますが、これはルーティングをシンプルで十分に文書化することで軽減できます。
  • 標準のSymfony 2分布には、Sensioframeworkextrabundleと呼ばれる実用的なバンドルが含まれています。これは、多くの強力な機能、特にコントローラーで直接注釈を使用する機能を実装しています。

この記事は、コントローラー構成の便利な代替品を導入することを目的としており、注釈の必須の方法ではありません。最良のアプローチは、特定のシナリオ要件に依存します。

Symfony 2は、強力な組み込みコンポーネントを使用してアプリケーション用のすべてのルーティングを管理しています:ルーティングコンポーネント。基本的に、ルートはURLをコントローラーアクションにマッピングします。 Symfonyはモジュール式になるように設計されているため、ファイルはこれに特別にセットアップされています:

にあります。

routing.ymlapp > config > routing.yml注釈を使用してルートを定義する方法を理解するには、簡単なブログアプリケーションを例に取りましょう。

ステップ1:ホームページルートを作成します

パスを

の操作にリンクします。

注釈方法

/ HomeControllerin

in

app/config/routing.yml

in
blog_front_homepage:
  path : /
  defaults:  { _controller: BlogFrontBundle:Home:index }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
では、2つのパラメーターを使用して、パスとコントローラー操作を配置する2つのパラメーターを使用して、単純な

ルーティング構成を宣言します。コントローラー自体は、特別な設定を必要としません。 src/Blog/FrontBundle/Controller/HomeController.php

<?php namespace Blog\FrontBundle\Controller;

class HomeController
{
    public function indexAction()
    {
        //... 创建并返回一个 Response 对象
    } 
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
注釈を使用して<

in routing.ymlblog_front_homepage

in

app/config/routing.ymlセンター:

  • resourceコントローラーを指定して
  • に影響します
  • typeルートを宣言する方法を定義します
  • prefixコントローラークラスのすべての操作のプレフィックスを定義します(オプション)
より重要なのは、コントローラーの構築方法です。まず、sensioframeworkextrabundleの関連するクラスを呼び出す必要があります。次に、ルートとそのパラメーターを実装できます。ここでは、パスと名前のみ(後で実行できるすべての操作が表示されます):

use SensioBundleFrameworkExtraBundleConfigurationRoute; @Route("/", name="blog_homepage")「ルーティングレイヤーでコントローラーを上書きする方法を知っているので、少なくとも同じ結果を得るには、より多くのコードが必要です。」

ステップ2:記事ページルートを追加

注釈方法

in

app/config/routing.yml

in
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キーを

から削除し、クラスの上部に追加の

を追加できます。 > /adminin routing.ymlprefix @Route

in

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" }キーに

を追加することによっても不要になります。 url
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) { /* ... */ }
}
ログイン後にコピー
httpメソッド

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
  • キーの要件を数値のみとして定義します
  • GETリクエストメソッドを定義します。 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート