1.ルーティング
class RootController extends AbstractController
{
/**
* @Route("/root", name="root")
*/
public function index()
{
return $this->render('root/index.html.twig', [
'controller_name' => 'BlogController',
]);
}
}
PHPDocに記載の有る @Route 定義がアノテーションによるルーティングです。”/root”にマッチするURLが来た場合にこの index 関数が実行されます。nameはユニークである必要が有る。
結果はResponseオブジェクト( Symfony\Bundle\FrameworkBundle\Controller\Response)をreturnで返します。$this->render() を呼び出すとTwigでレンダリングした結果をResponseオブジェクトとして返す。
/**
* ルーティングを増やす
* http://127.0.0.1:8000/root/demo/
* @Route("/root/demo", name="root_demo")
*/
public function demoAction()
{
return $this->render('root/index.html.twig', [
'controller_name' => 'RootController::demo',
]);
}
/**
* 引数のあるルーティング
* http://127.0.0.1:8000/books/detail/20/
* @Route("/books/detail/{book_id}/", name="book_detail",
* requirements={"book_id"="\d+"})
*/
public function bookDetailAction($book_id)
{
return $this->render('books/detail.html.twig', [
'book_id' => $book_id,
'book_detail' => 'dumy text'
]);
}
/**
* リクエスト内容を受け取る
* http://127.0.0.1:8000/books/detail/?book_id=33
* @Route("/books/detail/", name="book_detail_for_query")
*/
public function bookDetailActionForQuery(Request $req)
{
$book_id = $req->query->get('book_id');
return $this->render('books/detail.html.twig', [
'book_id' => $book_id,
'book_detail' => 'dumy text'
]);
}
/**
* HTTPメソッドに応じてルーティングする
* http://127.0.0.1:8000/books/edit/
* @Route("/books/edit/", name="book_edit_exec", methods={"POST"})
*/
public function bookEditExecAction(Request $req)
{
return $this->render('books/detail.html.twig', [
'book_id' => 0,
'book_detail' => '編集に成功しました'
]);
}
/**
* @Route("/demo404")
*/
public function demo404Action()
{
throw $this->createNotFoundException('見つからないようです');
}
/**
* JSONデータを返す
* http://127.0.0.1:8000/demoJsonResponse
* @Route("/demoJsonResponse")
*/
public function demoJsonResponse()
{
return $this->json([
'データ1' => 100,
'データ2' => 200
]);
}
※ルーテイングがわかりやすい