Symfonyに挑戦05「ページを作る」
第4章 - ページの作り方の基本に入る。
この章ではページを作ってブラウザ画面にHello,world!という脳天気な文字列を表示するのが目的のようだ。
ここらへんから「MVCパターン」「モジュール」など難しい単語がたくさん出てくるが、挫けずにいこう。
ページを表示するためにはモジュールが必要らしい。前回作成したfrontendと言うフォルダがアプリケーションという一つの固まりで、この中にいろんな機能を持ったモジュールを作成してWebアプリケーションを構成していくようだ。
モジュールのスケルトンを作成する
まずは、
http://localhost/content/index
というページを作るようだ。今アクセスしてもOops! Page Not Foundって出る。
ちなみに、
http://localhost/frontend_dev.php/content/index
こんな感じで「frontend_dev.php」を挟んでアクセスすると、エラーの内容が表示される。
前回作成したプロジェクトフォルダに移動し、以下コマンドを実行。
Mac:~ kaneda$ cd ~/Sites/myson Mac:myson kaneda$ php symfony generate:module frontend content
myson/apps/frontend/modules/contentフォルダの中にactionsとtemplatesというフォルダが出来た。
早速さっきのページを更新。
http://localhost/content/index
変化が微妙だけど「×」アイコンが「レ」アイコンに変わり、「モジュールの作成が成功した」と言っているようだ。
ページを追加する
次にcontentモジュールにページを追加する。
http://localhost/content/index
↑このページを削除して、
http://localhost/content/show
↑というぺージを作るらしい。
actions.class.phpの中のpublic function executeIndex()で始まり、{}で囲まれた部分を削除。削除した部分に新たにpublic function executeShow(){}をコピペ。プログラムの意味などはあまり深く考えずにコピペ。
myson/apps/frontend/modules/content/actions/actions.class.phpの中身
<?php /** * content actions. * * @package myson * @subpackage content * @author Your name here * @version SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $ */ class contentActions extends sfActions { public function executeShow() { } }
ファイルを保存してhttp://localhost/content/showにアクセスすると、「Oops! An Error Occurred」と出る。showを表示するためのテンプレートが無いためらしい。ので、テンプレートを作ってやる。
indexSuccess.phpをリネームして使おう。
myson/apps/frontend/modules/content/templates/indexSuccess.php
を、
myson/apps/frontend/modules/content/templates/showSuccess.php
にリネームしてブラウザで再アクセス。
http://localhost/content/show
すると、真っ白画面になった。
frontend_dev.phpを付けてアクセスしてみる。
http://localhost/frontend_dev.php/content/show
右上にバーが出てきたので、動いているようだ。
templates/showSuccess.phpを開いてみると中になにも書いていないからだ。showSuccess.phpの中になにか書いてやる。
myson/apps/frontend/modules/content/templates/showSuccess.phpの中身
<p>返してください。その夏次は私の祖父です。</p>
http://localhost/content/showにアクセスすると、ちゃんと表示された。
showSuccess.phpはphpファイルなので、当然phpプログラムも書けるようだ。
myson/apps/frontend/modules/content/templates/showSuccess.phpの中身を変更
<p>返してください。その夏次は私の祖父です。</p> <?php if (rand(1,3) == 3): ?> <p>いやです。</p> <?php else: ?> <p>のしを付けてお返しします。</p> <?php endif; ?>
http://localhost/content/showにアクセスすると無事表示された。
アクションにプログラムを書いてその結果をテンプレートに渡す
複雑なプログラムはアクションに書き、見た目の処理はテンプレートに書くようだ。
myson/apps/frontend/modules/content/templates/showSuccess.phpの中身を変更
executeShow()の{}の中に例文をコピペ。
public function executeShow()
{
$today = getdate();
$this->hour = $today['hours'];
}
myson/apps/frontend/modules/content/templates/showSuccess.phpの中身を変更
<p>返してください。その夏次(<?php echo $hour ?>)は私の祖父です。</p> <?php if (rand(1,3) == 3): ?> <p>いやです。</p> <?php else: ?> <p>のしを付けてお返しします。</p> <?php endif; ?>
http://localhost/content/showを再読込。()の中に現在の時間が表示された。
アクション側で$this->horaneってやると、テンプレート側で$horaneにセットされているようだ。
別のアクションにリンクする
難しいので飛ばそう。