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.phpphpファイルなので、当然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にセットされているようだ。

別のアクションにリンクする

難しいので飛ばそう。

リクエストから情報を入手する

ここも意味がわからない。フォームの送受信が簡単にできるようだが飛ばそう。


この章で解ったこと。

  • モジュールとはディレクトリだ。
  • モジュールを作るとindexというページ(アクション)が自動で作成されている。
  • ページを表示するにはアクションとそのアクション結果を表示するためのテンプレートが必要だ。
  • アクションにプログラム処理を。テンプレートに見た目の処理を。