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