基本的なルートの設定
_welcome:
path: /
defaults: { _controller: TipsBlogBundle:Main:index }
これは以下と等価。
class MainController extends Controller
{
/**
* @Route("/")
*/
public function indexAction()
{
}
}
プレースホルダー付きのルート
blog_show:
path: /blog/{slug}
defaults: { _controller: TipsBlogBundle:Blog:show }
これは以下と等価。
class BlogController extends Controller
{
/**
* @Route("/blog/{slug}", name="blog_show")
*/
public function showAction()
{
}
}
または
/**
* @Route("/blog")
*/
class BlogController extends Controller
{
/**
* @Route("/{slug}", name="blog_show")
*/
public function showAction($slug)
{
}
}
プレースホルダーの必須/任意設定
blog:
path: /blog/{page}
defaults: { _controller: TipsBlogBundle:Blog:index, page: 1 }
これは以下と等価。
/**
* @Route("/blog/{page}", name="blog", defaults={"page" = 1})
*/
public function indexAction($page)
{
}
ルートの条件
blog:
path: /blog/{page}
defaults: { _controller: TipsBlogBundle:Blog:index, page: 1 }
requirements:
page: \d+
これは以下と等価。
/**
* @Route("/blog/{page}", name="blog", defaults={"page" = 1}, requirements={"page" = "\d+"})
*/
public function indexAction($page)
{
}
別のパターンでは、
homepage:
path: /{culture}
defaults: { _controller: TipsBlogBundle:Main:index, culture: en }
requirements:
culture: en|ja
これは以下と等価。
/**
* @Route("/{culture}", name="homepage", requirements={"culture" = "en|ja"})
*/
public function indexAction($culture)
{
}
HTTP メソッド の制約をつける
同一のURLでもHTTPメソッドによって呼び出すメソッドやコントローラを使い分けることが可能。
contact:
path: /contact
defaults: { _controller: AcmeDemoBundle:Main:contact }
methods: [GET]
contact_process:
path: /contact
defaults: { _controller: AcmeDemoBundle:Main:contactProcess }
methods: [POST]
これはこう書ける。
class MainController extends Controller
{
/**
* @Route("/contact")
* @Method({"GET"})
*/
public function contactAction()
{
}
/**
* @Route("/contact")
* @Method({"POST"})
*/
public function contactProcessAction()
{
}
}