サーチ…


前書き

ルートとは、URLをコントローラクラス内のアクション(関数)にマッピングすることです。次のトピックでは、ルートを作成し、YAMLまたは注釈を使用してルート経由でパラメータをControllerクラスに渡すことに焦点を当てます。

備考

symfonyフレームワークが何を生成しているかを知ることは有益です。これは、特定のアプリケーションのすべてのルートを見るツールを提供します。

symfony Docから、(シェルで)以下を使用してください:

php bin/console debug:router

同様に、ルーティングメニューのFrameworkプロファイラで、関連するすべてのルート情報を見ることができます。 Symfonyプロファイラ

YAMLを使用したルーティング

ルーティング設定は、 app/config/config.ymlファイルに含まれています。デフォルトでは、 app/config/routing.ymlファイルにapp/config/routing.ymlます。

そこから、バンドル内の独自のルーティング設定にリンクすることができます

# app/config/routing.yml

app:
    resource: "@AppBundle/Resources/config/routing.yml"

また、複数のアプリケーショングローバルルートを含む場合もあります。

あなた自身のバンドルでは、2つの目的を果たすルートを設定することができます:

  • 要求に対して正しいアクションが呼び出されるように、要求と照合します。
  • 名前と経路のパラメータからURLを生成する。

YAMLのルート設定例を以下に示します。

# src/AppBundle/Resources/config/routing.yml

my_page:
    path: /application/content/page/{parameter}
    defaults:
        _controller: AppBundle:Default:myPage
        parameter: 42
    requirements:
        parameter: '\d+'
    methods: [ GET, PUT ]
    condition: "request.headers.get('User-Agent') matches '/firefox/i'"

ルートは命名されmy_page 、および呼び出すmyPageActionDefaultControllerAppBundle要求したとき。これには、デフォルト値のparameterという名前のparameterがあります。この値は、正規表現\d+と一致する場合にのみ有効です。このルートでは、HTTPメソッドGETPUTが受け入れられます。 conditionは、User-Agentヘッダーがfirefoxと一致しない限り、ルートが一致しない例の式です。式に渡される2つの変数context (RequestContext)とrequest (Symfony Request)を利用することで、式で必要な複雑なロジックを実行できます。

パラメータ値が10の生成されたルートは、 /application/content/page/10ます。

注釈を使用したルーティング

ルーティング設定は、 app/config/config.ymlファイルに含まれています。デフォルトでは、 app/config/routing.ymlファイルにapp/config/routing.ymlます。

そこから、注釈付きルーティング設定を持つコントローラにリンクすることができます:

# app/config/routing.yml

app:
    resource: "@AppBundle/Controller"
    type:     annotation

あなた自身のバンドルでは、2つの目的を果たすルートを設定することができます:

  • 要求に対して正しいアクションが呼び出されるように、要求と照合します。
  • 名前と経路のパラメータからURLを生成する。

以下は、注釈付きルート設定の例です。

// src/AppBundle/Controller/DefaultController.php

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

/**
 * @Route("/application")
 */
class DefaultController extends Controller {
    /**
     * @Route("/content/page/{parameter}",
     *        name="my_page",
     *        requirements={"parameter" = "\d+"},
     *        defaults={"parameter" = 42})
     * @Method({"GET", "PUT"})
     */
    public function myPageAction($parameter)
    {
        // ...
    }
}

コントローラにはプレフィックスルートが付加されているため、このコントローラ内に設定されているルートにプレフィックスを使用してプリペンドされます。

設定されたルートの名前はmy_page 、要求されたときはmyPageAction関数を呼び出します。これには、デフォルト値のparameterという名前のparameterがあります。この値は、正規表現\d+と一致する場合にのみ有効です。このルートでは、HTTPメソッドGETPUTが受け入れられます。

パラメータが関数パラメータとしてアクションに注入されていることに注意してください。

パラメータ値が10の生成されたルートは、 /application/content/page/10ます。

パワフルなレストルート

従来は、ルーティングを使用して、 HttpFoundationコンポーネントによって要求パラメータと応答パラメータを処理したルーティングコンポーネントで要求をマップできます

さらに、カスタムルーティングパラメータは、FOSRestBundleを使用してルーティングコンポーネントのデフォルト機能を拡張することによって作成できます。

これはRESTルートを作成するのに便利です。リクエストやレスポンスでXMLやjsonファイルなどの構造化データをどのように転送するかを指定するには本当に便利です。

詳細は、 FOSRestBundle Docを参照してください。特にこの注釈は、

use FOS\RestBundle\Controller\Annotations\FileParam;

/**
 * @FileParam(
 *   name="",
 *   key=null,
 *   requirements={},
 *   default=null,
 *   description="",
 *   strict=true,
 *   nullable=false,
 *   image=false
 * )
 */


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow