10分ぐらいで学べるSymfony2 〜基本構造編〜

前回は環境を作りましたので今回は簡単にバンドルの作成と
それに付随する構造のメモです。
基本的にはSymfony Bookに書いてある内容だったりします。


基本ディレクトリ構造

Symfonyのプロジェクトルート以下の構造
web/                #  ドキュメントルート
src/                #  プロジェクトのPHPコード
vendor/             #  ベンダーライブラリ
app/
app/logs/          #  アプリケーションログ
app/cache/          #  キャッシュ
app/config/         #  プロジェクトの設定
app/Resources/views # ベーステンプレート

バンドルの作成コマンド

php app/console generate:bundle --namespace=Test/HelloBundle --format=yml


作成コマンドで修正/追加されるファイル

# バンドルのルーティング設定追記(親)
app/config/routing.yml
# リストに「HelloBundle」バンドルを登録
app/AppKernel.php
# バンドルソース
src/Test/HelloBundle
src/Test/HelloBundle/Controller/           # バンドルのコントローラ
src/Test/HelloBundle/Resources/views       # viewテンプレート
src/Test/HelloBundle/Resources/config/     # バンドルの設定
src/Test/HelloBundle/Tests                 # testのソース


基本的なアクセスのフロー

下のようなアクセスがあった場合

http://XXXXX.ap-northeast-1.compute.amazonaws.com/app_dev.php/hello/hoge

(1)ルーティング処理が行われる。

# ルーティングファイル
src/Test/HelloBundle/Resources/config/routing.yml

# 「/hello/hoge」へのアクセスなのでマッチして、
# TestHelloBundleバンドルのDefaultコントローラのindexアクションへ処理を渡す
TestHelloBundle_homepage:
    pattern:  /hello/{name}
    defaults: { _controller: TestHelloBundle:Default:index }


(2)コントローラ処理

# TestHelloBundleバンドルのDefaultコントローラのindexアクション
src/Test/HelloBundle/Controller/DefaultController.php

# $nameにパラメータが渡る
# TestHelloBundleバンドルのDefaultコントローラの「index.html.twig」を読み混む
# 書式:BundleName:ControllerName:TemplateName
class DefaultController extends Controller
{
    public function indexAction($name)
    {
        return $this->render('TestHelloBundle:Default:index.html.twig', array('name' => $name));
    }
}

(3)レンダリング

# テンプレートファイル
# ファイルの規則:/path/to/BundleName/Resources/views/ControllerName/TemplateName
src/Test/HelloBundle/Resources/views/Default/index.html.twig

# renderの配列パラメータが変数として渡る
Hello {{ name }}!?

とりあえず、静的なページは作れそうな気がしてきました。
次回はDoctrineでデータベース関係のメモ予定