symfony askeet Day 4

  • showSuccess.phpを書き換える
  • テストデータの追加
  • モデルを弄る
  • 同じことは繰り返さない
  • モデルを弄る その2
  • はまったのでやりなおした。
  • 回答部分にも同じことをする

showSuccess.phpを書き換える


いわゆる詳細画面のところですね。
デザインの変更の他にコメント欄が追加されたと書かれています。

テストデータの追加

Day 3で設置したload_data.phpを使ってコメントデータをDBに流します。
内容はコメントのデータのようです。

モデルを弄る その1

名前を呼び出すことが多いのでフルネームを呼び出せるようにしようとあるので
姓+名を出す関数をaskeet/lib/model/User.phpに追加します。

getUser()だけでフルネームが呼び出せるようになりました。

同じことは繰り返さない

listSuccess.phpとshowSuccess.phpには共通点があって、それはこの部分。

  <div class="interested_mark" id="mark_<?php echo $question->getId() ?>">
    <?php echo count($question->getInterests()) ?>
  </div>

この部分をフラグメントにしますとあるので同階層に_interested_user.phpというファイルを作ります。
_interested_user.phpをlistSuccess.phpやshowSuccess.phpで呼び出すには
include_partialと書いてあります。

include_partial('<パーシャル名>',
array(<パーシャル内で必要となる変数の配列>))

http://codezine.jp/article/detail/1063?p=2
<?php include_partial('interested_user', array('question' => $question)) ?>

ファイル名の最初に_が付いているのにパーシャル名には_が付いていないのかは
本家:Chapter 7 - Inside The View Layer (1_0) - Symfony
翻訳:http://symfony.xrea.jp/1.0/book/07-Inside-the-View-Layer.html#partials
を読んでくださいとあったので読むと
テンプレートと区別するためにパーシャル(コードの断片)のファイルには_を付けろとあります。

モデルを弄る その2

まず、DBのテーブルにinterested_usersという行を追加する。

scheme.xmlに追加すると書いてありますが、なかったのでscheme.ymlから変換することに。

次に、InterestオブジェクトにSaveメソッドを追加する。

askeet/lib/model/Interest.phpにメソッドを追加と。
トランザクションにも対応させます。なるほど。

最後にさっきのパーシャル(_interested_user.php)を書き換えて終了。
…と、まあ途中までは上手くいってるなーとか思っていたらはまったわけです。


いろいろ悩んで考えて調べまくっていても分からなかったので
id:TamaCさんに質問しに行きました。
答えはscheme.ymlにありました。
このaskeetはDB内のテーブル名と自動生成するモデル名を分けたいらしく
別名指定をしなければならないようです。

  ask_question: 
    _attributes: 
      idMethod: native
      phpName: Question

phpName:というもので指定すると別名指定できるようです。
これが指定されないと生成されるモデル名がAskQuestion〜〜みたいになってしまいます。
Questionを呼び出したいのにも関わらずQuestionが無ければエラーが出る。
そういうことみたいです。




ここまで書いてきて何ですが、いろいろやっていたら訳が分からなくなり
一度やり直しました。><
これで分かったことがあります。

  • とりあえず、分かったことはaskeetを信用してならない。
  • YAMLを書けるようになること大事。

先ほどはまったのはscheme.ymlのせいだったりもしたので
YAML大事ということがよくわかりました。

ということで、リカバーできたので続きに行きたいと思います。

回答部分にも同じことをする

だんだんaskeetの説明文がえらいこと適当になってきたなぁと思いつつ
復旧で全力を尽くしたので今日はここらへんでお開き。
明日はルーティングからがんばります。