symfonyでhelloworld

昨日のエントリの続き。
アプリケーションを作ったところから、helloworldを表示させるところまで。

モジュールを作成する

myprojectプロジェクトのhelloアプリケーション内に、適当なモジュール(ここではworldモジュール)を作成する。

$ cd ~/myproject
$ php symfony generate:module hello world

この時点で /hello_dev.php/world/index/ にアクセスできるようになっている。

このURLで実行されるアクションは、 myproject/apps/hello/modules/world/actions/actions.class.php となる。
ディレクトリ深いのでエクスプローラIDEのようなものがほしくなりますね。
ファイルはこんな感じ。(ソースのコメント部分は削除した)

<?php
class worldActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $this->forward('default', 'module');
  }
}

defaultアプリケーションのmoduleアクションにforward(転送)している。
このforward部分のコードを削除すると、 myproject/apps/hello/modules/world/templates/indexSuccess.php テンプレートが使われるようになる。
actions.class.phpとindexSuccess.phpを編集する。

actions.class.php
<?php
class worldActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
  }
}
indexSuccess.php

テンプレートは素でPHPを使うのと似たようなものなので、HTMLをそのまま書けてPHPコードも入れられる。

<h1><?php echo 'Hello, world!' ?></h1>

これで /hello_dev.php/world/index/ の表示が「Hello, world!」になった。

URLルーティングを変更する

このworldモジュールのindexアクションをトップページ /hello_dev.php/ で表示するためにURLルーティングを変更する。
myproject/apps/hello/config/routing.yml を編集する。
デフォルトで用意されているルーティングを削除して、/ へのアクセスでworldモジュールのindexアクションを使うようにする。

routing.yml
homepage:
  url:   /
  param: { module: world, action: index }

これで /hello_dev.php/ で表示されるようになった。

ここで、 / でアクセスしてみると、変更が反映されておらず、symfonyのデフォルトページが表示されてしまう状態になった。
これはsymfonyphpのモジュールをキャッシュするようになっているからみたい。
symfonyのモジュールのキャッシュを削除するには、 cache:clear コマンド(省略ならcc)を実行する。

$ php symfony cc

キャッシュを削除して / にアクセスすると「Hello, world」と表示されるようになった。

2010/04/15訂正

layout.phpの存在を忘れていたのでindexSuccess.phpの内容を修正。