uchiumiです。
今日は「Askeet Tutorial」の16日目に変更されたところを追加変更したときにでたエラーの対処法について書きたいと思います。
まずは私は変更されていそうな箇所をaskeetのSVNリポジトリから落としてきて、見比べながら変更してみました。
なので変更が足りない所為で出てしまっているエラーもあるかもしれませんが、とりあえず私はこのように対処しました、ということを書いていきたいと思います。
- Error populating QuestionTag object [wrapped: Invalid resultset column: 3] というエラー
- まずこのエラーが出てどの画面も表示できなくなってしまいました。
「wrapped: Invalid resultset column:」で検索してみたところdoSelectの部分をdoSelectRSにすれば大丈夫とのことでした。
なのでquestion.phpの3つあるdoSelectの部分をdoSelectRS変えてあげると、エラーは消えてなくなりました。
- Call to a member function getNormalizedTag() on a non-object というエラー
- 次にこのエラーがでました。getNormalizedTag()なんてないみたいなこと言われてますね。
これは下記の様な使い方をしています。$tags[] = $tag->getNormalizedTag();
ということで、$tagをvar_dump()してみると、中身はarrayでした。確か変更前までobjectだったはずです。
この$tagは下記のようにして取得されています。foreach (QuestionTagPeer::doSelectRS($c) as $tag)
上記のdoSelectRS($c)はさっきRSを付け足したとこです。
これが原因かと思ってちょっとQuestionTagPeer.phpの方もみてみたんですがよくわからず。。
とりあえずNormalizedTagが入っていると思われるの$tag[1]を使い、$tags[] = $tag[1]
と無理矢理このようにしてみました。
- Strict Standards: Non-static method QuestionTagPeer::getPopularTags() should not be called statically, assuming $this from incompatible context inというエラー
- どうやらインスタンスメソッドをクラスメソッドとしてよんでいるらしい。何故いきなり・・・。とりあえずgetPopularTags()メソッドにstaticつけておきました。
- Fatal error: Cannot redeclare get_callbacks() (previously declared in ~pear/PEAR/symfony/helper/JavascriptHelper.php:52) in というエラー
- これは凡ミスで、Javascriptのヘルパーを指定するとき頭文字が小文字になっていたのが原因でした。わりと悩んでしまったので、ちゃんと覚えなければと感じました。
- questionモジュールのshowSuccess.phpで$answersが使えない
- action.class.phpをみてもどこにも$answersという変数は仕様されていませんでした。
なので確か前は、$question->getanswers()と書いてあったと思ったので、$answersの代わりにこちらを使うことにしました。
- Missing argument 2 for sfParameterHolder::set(), called in
- これも凡ミスで、getの部分がsetになっていました。直し忘れたのかもしれません。ごめんなさい。
ちなみにmyLoginValidator.class.phpの$error = $this->getParameterHolder()->get(’login_error’);
のところです。
- form_errorでエラー
- 持ってきたソースにはuse_helper(’Validation’)がいい感じに消されていたので、なくても良くなったのかぁ、などと思いながら消していたのですが、ダメみたいでした。
なので消したものを元通りにしてあげたらちゃんと動くようになりました。
- $user、$pramsなどでエラー
- これも、最初は$sf_user等になっていたのですが、sf_なくても平気になったのかぁ、思いながら消していたら、案の定動きませんでした。
しかも隠してあるログイン画面などでこのエラーがでると、エラーも隠れてしまうので、何がおこっているのかぱっとみて気づく事ができませんでした。
エラーの所為でエラーが出た箇所以降の表記がまったくなくなり、エラーはでてないのに画面には何も表示されてくれないという悲惨な目にあいました。
なのでこれも全てsf_がついた状態に戻してあげました。
以上になります。
チュートリアルで説明のない16日目の変更をする際気をつけた方がいいと思ったことは、
レイアウトの変更を先にしない方がいい、ということです。
アクションなどの中身を変える前にレイアウトを変更してしまうと、もし動かないとき何が原因なのかほとんどわからなくなってしまいます。
アクションを変えながらそれに合わせてレイアウトのほうも変えていけば、バグ取りももうちょっと早く思ったのかもしれないと思っています。
さてエラーはとれましたが、まだ把握しきれていなかったり、気になる点はいくつかあるので先を進めながら理解し、直していきたいと思います。

by hirafuji, on 09.02.08 @ 11:45 AM
とても参考になりました。続編に期待しています!