version : BETA3 (正式リリース後, 改変の可能性あり)
When Flat PHP meets Symfony では, FrameWorkを使うことに利点みたいなのを書いていますので, 初めてFrameWorkなるものを使用して開発する!という場合は読んだほうが良いでしょう。(日本語ドキュメントもありました。)
ただ、ここではこの章は省略します。
ということで,
Creating Pages in Symfony2 を読んでいきます。
(訳というよりも解説なんで、よろしくですw)
まず, Symfony2でのページ作成は, 以下のSTEPで成り立っている。
◯ Bundleの作成
① Create a route : リクエストのURIから, 対応するコントローラーを指定するための Routing 情報を決める
② Create a controller : リクエストを処理し, 応答を返すための Controller の部分を作成
③ Create a template : テンプレートの作成
ということで、実際にマニュアルに従って作成してみる
Bundleの作成
Bundleの作成
ページ作成を始める前に, まず Bundle というものを作成する必要がある。(Bundleってのは, プラグイン的な物で, Symfony2の中の要素は全て Bundle であるらしい)
で, 作成するには以下のコマンドを実行すれば良い。ちなみに, 以下のコマンドで Cannot write to cache folder みたいなエラーが出たら, cacheフォルダの権限がおかしいので, chmod -R 777 cache してやってね!
php app/console init:bundle "Acme\StudyBundle" src
で, このコマンドの出力結果は以下のようなものだった。
Summary of actions
- The bundle "AcmeStudyBundle" was created at "src/Acme/StudyBundle" and is using the namespace "Acme\StudyBundle".
- The bundle contains a sample controller, a sample template and a sample routing file.
Follow-up actions
- Enable the bundle inside the AppKernel::registerBundles() method.
Resource: http://symfony.com/doc/2.0/book/page_creation.html#create-the-bundle
- Ensure that the namespace is registered with the autoloader.
Resource: http://symfony.com/doc/2.0/book/page_creation.html#autoloading-introduction-sidebar
- If using routing, import the bundle's routing resource.
Resource: http://symfony.com/doc/2.0/book/routing.html#including-external-routing-resources
- Starting building your bundle!
Resource: http://symfony.com/doc/2.0/book/page_creation.html#the-hello-symfony-page
で, この出力にあるように , 実際に見てみると src/Acme/StudyBundle が作成されています。
ちなみに作成されたディレクトリ構造は以下.
StudyBundle/
AcmeStudyBundle.php
Controller/
DefaultController.php
Resources/
config/
routing.yml
view/
Default/
index.html.twig
ちなみに, このコマンドを使用しない場合は, 自分でディレクトリやAcmeStudyBundle.phpなどを作成する必要があります(ドキュメント同ページの Creating a Bundle を参照してください)
app/autoload.phpを確認
app/autoload.php に, 以下の記述を追加することで, ネームスペースがロードされることを確認
$loader->registerNamespaces(array(
'Acme' => __DIR__.'/../src',
));
AppKernel classを確認
$registerBundles というメソッドに, Bundle を追加することで, Bundle の初期化を行う。
( $bundle に, new Acme\StudyBundle\AcmeStudyBundle(), を追加する)
Route の作成
app/config/routing.yml に, ルーティング情報を追加する。xmlでも, PHPでも良いらしいけど, デフォルトではYAMLであったため, YAMLでやっていきます!
※ routing.yml のインポートも可能! css のインポートみたく @ を付けて
resource: "@AcmeStudyBundle/Resources/config/routing.yml"
のようにする!
routeの詳細は後日ってことで。
Controller の作成
routeに, /hello/{name} というパターンに対して AcmeStudyBundle:Hello:index が呼ばれるように設定する(詳細はドキュメント見てね!)
そうしたとき, /hello/{name} でアクセスすると,
AcmeStudyBundle の HelloController の indexAction が呼ばれるわけである。そしてindexActionの引数に$nameが渡される。
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
を使用することで, テンプレートを使用してページを作成できる。ちなみに, ビューは Twig テンプレートが基本らしいですね。
そのテンプレートの配置方法は以下の様にすればいいっぽい (twigを使用することを前提としてます)
#コンテンツ部分 : src/[Bundle]/Resources/views/[コントローラー名]/[アクション名].html.twig
例 ) src/Acme/StudyBundle/Resources/views/Hello/index.html.twig
※ このビューファイルから, {% extends '::layout.html.twig' %} などとして, ↓ のレイアウトを指定するっぽいです。
#レイアウト部分 : app/Resources/views/[レイアウト名].html.twig (cakePHPでいう, views/layout/*.ctpのこと)
例 ) app/Resources/views/layout.html.twig
controllerについてやviewについての詳細はここでは説明しません。。