2011年10月12日水曜日

独学Symfony2 : report2

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についての詳細はここでは説明しません。。

0 コメント:

コメントを投稿

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More