サーチ…
前書き
ルートとは、URLをコントローラクラス内のアクション(関数)にマッピングすることです。次のトピックでは、ルートを作成し、YAMLまたは注釈を使用してルート経由でパラメータをControllerクラスに渡すことに焦点を当てます。
備考
symfonyフレームワークが何を生成しているかを知ることは有益です。これは、特定のアプリケーションのすべてのルートを見るツールを提供します。
symfony Docから、(シェルで)以下を使用してください:
php bin/console debug:router
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
、および呼び出すmyPageAction
のDefaultController
でAppBundle
要求したとき。これには、デフォルト値のparameter
という名前のparameter
があります。この値は、正規表現\d+
と一致する場合にのみ有効です。このルートでは、HTTPメソッドGET
とPUT
が受け入れられます。 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メソッドGET
とPUT
が受け入れられます。
パラメータが関数パラメータとしてアクションに注入されていることに注意してください。
パラメータ値が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
* )
*/