サーチ…


前書き

ルーティングとは、URLをコントローラにマッピングするプロセスです。 symfonyにはルーティングを定義する強力なルーティングコンポーネントがあります。

Routingコンポーネントは、注釈、YAML、XML、および生のPHPなど、さまざまな設定フォーマットをサポートしています。

パラメーター

パラメータ詳細
ルートの名前。例: book_show
パスパス(ワイルドカードを含む場合があります)。例: /book/{isbn}
デフォルトパラメータのデフォルト値

シンプルルート

YAMLを使う:

# app/config/routing.yml
blog_list:
    path:     /blog
    defaults: { _controller: AppBundle:Blog:list }

注釈の使用:

// src/AppBundle/Controller/BlogController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class BlogController extends Controller
{
    /**
     * @Route("/blog", name="blog_list")
     */
    public function listAction()
    {
        // ...
    }
}

/blog URLのリクエストは、 BlogController内のAppBundle listAction()メソッドによって処理されます。

プレースホルダを使用したルート

YAMLを使う:

# app/config/routing.yml
blog_show:
    path:     /blog/{slug}
    defaults: { _controller: AppBundle:Blog:show }

注釈の使用:

// src/AppBundle/Controller/BlogController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class BlogController extends Controller
{
    /**
     * @Route("/blog/{slug}", name="blog_show")
     */
    public function showAction($slug)
    {
        // ...
    }
}

/blog/*と一致するURLを持つリクエストは、 BlogController内のAppBundle showAction()メソッドによって処理されます。コントローラアクションは、メソッドの引数としてプレースホルダの値を受け取ります。

たとえば、 /blog/my-postリクエストは、値my-postを含む引数$slugを使用してshowAction()を呼び出します。コントローラのアクションは、その引数を使用して、たとえばデータベースからslug my-postしてブログ投稿を取得するなど、プレースホルダの値に応じてレスポンスを変更できます。

プレースホルダのデフォルト値

省略可能なプレースホルダを使用する場合は、デフォルト値を与えることができます。

YAMLを使う:

# app/config/routing.yml
blog_list:
    path:      /blog/{page}
    defaults:  { _controller: AppBundle:Blog:list, page: 1 }
    requirements:
        page: '\d+'

注釈の使用:

// src/AppBundle/Controller/BlogController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class BlogController extends Controller
{
    /**
     * @Route("/blog/{page}", name="blog_list", requirements={"page": "\d+"})
     */
    public function listAction($page = 1)
    {
        // ...
    }
}

この例では、 /blog/blog/1両方のURLがblog_listルートと一致し、 listAction()メソッドによって処理されます。 /blogの場合、 listAction()$page引数を受け取り、デフォルト値は1です。



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