Beginner's Tutorial 5 ユーザー用モジュール作成

これは以下のサイト(英語)のチュートリアルを実際にやってみた時のメモ。英語苦手なのと、試行錯誤した記録のため。
Learn symfony: a Beginner's Tutorial — SitePoint
ユーザー用モジュール public を作成します。

symfony init-module frontend public

index のアクションを書きます。
apps/frontend/modules/public/actions/actions.class.php

<?php
...
  public function executeIndex()
  {
    $c = new Criteria();
    $c->addDescendingOrderByColumn(PhotoPeer:ATED_AT);
    $this->photos = PhotoPeer:elect($c);
  }

やっと普通のモジュールと Criteria の説明というわけですな。ビュー部分は以下の通り。

<div id="main">
  <h1>My pictures</h1>
  <?php foreach($photos as $photo):n  <div class="photo">
    <?php echo link_to(
      image_tag('/uploads/thumbnail/'.$photo->getFilePath()),    'public/photo?id='.$photo->getId(),    'class=image title='.$photo->getDescription()
    ) ?>
    "<?php echo $photo->getDescription() ?>"  
    on <?php echo $photo->getCreatedAt('d/m') ?>,    tagged <?php echo $photo->getTagsString() ?>
  </div>
  <?php endforeach; ?>
  <div id="footer">
    powered by <?php echo link_to('symfony',tp:ww.symfony-project.com') ?>
  </div>
</div>

preExecuteというのが出てきた。execute...というのの前に実行する symfony の actions オブジェクトの機能らしい。知らなかった。テンプレートの指定などに便利そう。
actions.class.php

<?php
...
  public function preExecute()
  {
    $this->getResponse()->addStylesheet('frontend');  
  }

photoページのコントロールとビュー
apps/frontend/modules/public/actions/actions.class.php

<?php
...
  public function executePhoto()
  {
    $photo = PhotoPeer:retrieveByPk($this->getRequestParameter('id'));
    $this->forward404unless($photo);
    $this->photo = $photo;
  }

photo ページの作成。テンプレート部分。
apps/frontend/modules/public/template/photoSuccess.php

<div id="main">
  <?php echo link_to('back to the photo list','public/index','style=display:ck;float:ht;') ?>
  <h1>Picture details</h1>
  <a href="/uploads/<?php echo $photo->getFilePath() ?>" title="click for the full-size version">
    <?php echo image_tag('/uploads/'.$photo->getFilePath(),'width=100%') ?>
  </a><br/>
  <p>
    "<?php echo $photo->getDescription() ?>"
    published on <?php echo $photo->getCreatedAt('d/m') ?>,n    tagged <?php echo $photo->getTagsString() ?>
  </p>
  <div id="footer">
    powered by <?php echo link_to('symfony','http:ww.symfony-project.com') ?>
  </div>
</div>

今回はこんなもんかな。admin で、だいたいの構造を作っているのが、ユーザー用モジュールの作成をスムーズにさせている気はする。公海部分が見せるのメインだったら、アドミンジェネレータで仕組みを作ってから、後で表示部分を作るというのも手だと思った。
でも、クライアントとか上司とかに見せながら作っていくなら、やっぱメインの表示部分ありきかな。