お節介


最近、symfonyをさわってみてます。

チュートリアルを実際に試しながら動かしてみて、さらに変数名やテーブル構造を変えていじってみて、どうにもうまく動かない箇所があった。symfony というかDoctrineの挙動なのかな。

文章には、以下のように書かれている箇所がある。

Doctrine は titlenamesubject など説明用のカラム名を推測して、基本的な __toString() メソッドを提供しようとします。何かをカスタマイズしたい場合は、次のように独自の __toString() メソッドを追加する必要があります。

「title, name, subjectなど」、など?、などってなんだよ!

hoge_name というカラム名をどうにも期待通りに扱ってくれなかったが、海外でも似たように悩んだ人がいて、フォーラムに解説を見つけることができた。

“lib\plugins\sfDoctrinePlugin\lib\record\sfDoctrineRecord.class.php”
なんて深いパスにあるファイルの中に、それはあった。

  /**
   * Returns a string representation of the record.
   *
   * @return string A string representation of the record
   */
  public function __toString()
  {
    $guesses = array('name',
                     'title',
                     'description',
                     'subject',
                     'keywords',
                     'id');

ここで、name, title, subjectなどヒットさせたいキーワードを定義してたのね。
そして、こんなのを追記すれば、hogeテーブルのhoge_nameというカラム名もいけるってことだ。

$this->getTable()->getTableName().’_name’

各所で__toString()を追加するのが、正しいやり方のようだけど、数が多くてルールがしっかりしているなら、ライブラリにキーワードを追記しちゃうのがいいよなぁ。
でも、バージョンアップしたときや、似た列名が複数登場したときに困るか。
やっぱり各所で定義するのがいいのかな。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">