symfonyチュートリアル実践【第7日目】

7日目

モデルとビューの取り扱い。

“Previously on symfony”では相変わらず読者の心理を見透かしたように、もう6日もかけたけどこのアプリ使えねーじゃん?と思っていませんか、みたいなことが書かれている。

最初の項目、”Prefactoring”。pre+refactoring?と思って調べたらやはり造語でした。
プレファクタリング(Ken Pugh 著)

「プレファクタリング」(Prefactoring)とは、pre(事前に)+refactoring(リファクタリング)という意味の新造語です。リファクタリングとは、コーディング中にコードの動きを変えずにコードを改善する手法のこと。そして、プレファクタリングは、コーディング前にリファクタリングを行うことで、リファクタリングの効率をさらに上げようというもので、著者のKen Pughが提唱している新しい開発手法です。

コピペして手順を追っているだけなのでプレファクタリングもへったくれもないですが。。

手順は

$ mkdir apps/frontend/lib/helper
$ vi apps/frontend/lib/helper/GlobalHelper.php

でpager_navigationを定義。

ページャに使う画像をSVNのレポジトリからダウンロードしましょう、とあるがリンク先にはファイルがない。ページ下部のコメント#24に正しいリンク先が書いてある。web/images/にダウンロード。

wget -r --level=1 http://svn.askeet.com/trunk/web/images/

どうせ使うだろう、とディレクトリの中身をまとめてダウンロードしてみた。wgetの使い方が稚拙なのでもうちょっとオプションを工夫しないと。。

5日目のチュートリアルの最後でよくわからなかったapps/frontend/modules/question/templates/_list.phpもここで書き換え。

ブラウザでアクセスするとwgetでロゴもダウンロードしたので少し華やかになった。

http://askeet/frontend_dev.php/question/list

続いて”List of the recent questions”ではapps/frontend/modules/question/actions/actions.class.phpに新しいメソッドを追加。

この辺りのデータベースに問い合わせるメソッドはPropelがうまくやってくれているらしいが、深く調べずに先に進むことにする。

apps/frontend/module/question/templates/recentSuccess.phpを作ったりして、チュートリアルのBut wait、のところからは、そのままだとページャのリンク先が/question/list/page/2などのままなのでrecentへの修正。

“List of the recent answers”と”User profile”はどんどん書き換えていくだけ。チュートリアルには絶対パスが端折られているので(まだファイルのパスを覚えきっていないので)find ./ -name hoge.phpで調べつつ。

途中、

http://askeet/frontend_dev.php/question/list

Notice: Undefined variable: rule in /home/funaki/work/sfprojects/askeet/apps/frontend/modules/question/templates/_list.php on line 20

が出たので

<?php echo include_partial('list', array('question_pager' => $question_pager, 'rule' => 'question/list')) ?>

と_list.phpを呼び出しているapps/frontend/modules/question/templates/listSuccess.phpの該当箇所を修正した。チュートリアルにある程度忠実にコードは書いているつもりだが、こういったエラーがチュートリアルの不備なのか自分のミスかよくわからない。。

とはいえ、だいぶページ間のつながりができてアプリっぽくなってきた。

“Add a navigation bar”で打つコマンド。

$ symfony init-module frontend sidebar
$ mv apps/frontend/modules/sidebar/actions/actions.class.php apps/frontend/modules/sidebar/actions/components.class.php
$ rm apps/frontend/modules/sidebar/templates/indexSuccess.php
$ symfony clear-cache

component viewという新しいテンプレートのようなものが出てくる。actionとはファイルの命名規則やクラスの定義が違う。
一通り手順を踏んでブラウザで/frontend_dev.php/にアクセスすると以下のようなエラーが。

Notice: Undefined offset: 1 in /usr/share/pear/symfony/config/sfViewConfigHandler.class.php on line 148
Notice: Undefined offset: 1 in /usr/share/pear/symfony/config/sfViewConfigHandler.class.php on line 149

YAMLはやはり鬼門!apps/frontend/config/view.ymlに書き加えた

sidebar:    [sidebar,default]

これだと動かない。

sidebar:    [sidebar, default]

これで動いた。仕様なので覚えないといけないなぁ。。

あとチュートリアルの方はまとめ的な記述が続く。7日目にしてsymfonyの大枠は習い終えたことになったようです。次はお待ちかね、Ajaxによるインタラクション。

This entry was posted in いじる. Bookmark the permalink. Both comments and trackbacks are currently closed.

Page optimized by WP Minify WordPress Plugin