Symfony2で新しいページの作成と表示をする方法。
前回の記事ではSymfony2本体のインストールとプロジェクト作成までを行いました。このページでは新しいページの作成と、作成したページを実際にブラウザで開く方法を確認します。
見ていただければわかりますが、ページ作成はコマンド入力だけでOK。難しい設定なども一切ないので非常に簡単に作れます。
Symfony2の簡単な使い方 ページ作成編
symfony2 基本知識
Symfony2でどのようにしてページが表示されるかは、公式ドキュメントに載っているこの図を見ると分かりやすいです。
Routing: Under the Hood
大まかな流れとしてはこんな感じ。
- URLリクエストをフロントコントローラで受け取り
- 受け取った情報を元にルーティングし、マッチしたコントローラを返す
- コントローラのアクションを実行しレスポンスを返す
一連の流れはsymfonyが勝手にやってくれるので、こちらはコントローラの作成とルートの設定をやってればOK。ルートの設定は非常に簡単で基本的には以下のような書き方になってます。
// ...
class MainController extends Controller
{
/**
* @Route("/")
*/
public function homepageAction()
{
echo 'hello world!';
}
}
コントローラのアクションに上記のようなルート(@Routeの部分)を追記するだけで、アクションが実行されます。この場合、トップページを開くと、homepageAction()
が実行されます。
ルートの書き方はこのような単純なものだけでなく、他にもいろいろ便利なものがあるんですが...詳しく書くと長くなるのでこちらのドキュメントを参考にしてみてください。
SymfonyJapan ルーティング
symfony2 新しいページの作り方
表示したいページは手作業でも作ることができますが、コマンド入力して自動作成する方が楽。質問に答えていく形で必要な情報を入力するだけで簡単につくれてしまいます。
コントローラを作るためのコマンドはこちら。
$ php app/console generate:controller
このコマンドを実行すると以下のような質問が出てくるので、必要な情報を入力しましょう。
- コントローラ名: AppBundle:MyController
- ルーティングフォーマット: デフォルトのままエンター
- テンプレートフォーマット: デフォルトのままエンター
- アクション名: myAction
- アクションルート: /my-route
- テンプレート名: デフォルトのままエンター
- アクション名: 2つ目以降のアクションを作成できるが、何も入力せずエンター
- 最後の確認: デフォルトのままエンター
たったこれだけで、新しいコントローラと表示するページ(Twigテンプレート)が作成されます。
symfony2 新しいページの表示方法
コントローラができたらページを表示してみましょう。
まずはサーバーを起動します。
$ php app/console server:run
そのあと作成したアクションのルートをブラウザで表示してみます。※サーバーを停止するにはctrl+cを押します
http://127.0.0.1:8000/my-route
上記の例ではmy-route
としていますが、この部分は作成したルートURLに変更して下さい。うまくいくと画像のようなページが表示されるはずです。
先ほどのコマンドで自動作成されたテンプレートの中身はこんな感じ。base.html.twig
に記述されたテンプレートのtitle
とbody
の中身を書き換えています。
{% extends "::base.html.twig" %}
{% block title %}AppBundle:MyController:my{% endblock %}
{% block body %}
<h1>Welcome to the MyController:my page</h1>
{% endblock %}
コントローラの方はこうなっています。/my-route
にアクセスするとmyAction()
が実行され、テンプレートを読み込みます。その際配列などの情報をテンプレートに渡すことも可能。
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class MyControllerController extends Controller
{
/**
* @Route("/my-route")
*/
public function myAction()
{
return $this->render('AppBundle:MyController:my.html.twig', array(
// ...
));
}
}
この後は?
コントローラ作成コマンドを1行実行するだけで簡単にページ表示ができました。あとは自動作成されたテンプレートの中身を書き換えたり、アクションの実行時にデータベースからデータを引っ張り出したりすれば立派なアプリのできあがり。
次回はTwigテンプレートの書き方や便利な使い方をチェックしていきます。