Symfony2の簡単な使い方 新しいページの作成と表示方法

Pocket

Symfony2で新しいページの作成と表示をする方法。

前回の記事ではSymfony2本体のインストールとプロジェクト作成までを行いました。このページでは新しいページの作成と、作成したページを実際にブラウザで開く方法を確認します。

見ていただければわかりますが、ページ作成はコマンド入力だけでOK。難しい設定なども一切ないので非常に簡単に作れます。

Symfony2の簡単な使い方 ページ作成編

symfony2 基本知識

Symfony2でどのようにしてページが表示されるかは、公式ドキュメントに載っているこの図を見ると分かりやすいです。
Routing: Under the Hood
symfony2ルーティングの図

大まかな流れとしてはこんな感じ。

  1. URLリクエストをフロントコントローラで受け取り
  2. 受け取った情報を元にルーティングし、マッチしたコントローラを返す
  3. コントローラのアクションを実行しレスポンスを返す

一連の流れは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に変更して下さい。うまくいくと画像のようなページが表示されるはずです。
symfony2新しいページ作成方法

先ほどのコマンドで自動作成されたテンプレートの中身はこんな感じ。base.html.twigに記述されたテンプレートのtitlebodyの中身を書き換えています。

{% 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テンプレートの書き方や便利な使い方をチェックしていきます。