最近、symfonyをさわってみてます。
チュートリアルを実際に試しながら動かしてみて、さらに変数名やテーブル構造を変えていじってみて、どうにもうまく動かない箇所があった。symfony というかDoctrineの挙動なのかな。
文章には、以下のように書かれている箇所がある。
Doctrine は
title、name、subjectなど説明用のカラム名を推測して、基本的な__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()を追加するのが、正しいやり方のようだけど、数が多くてルールがしっかりしているなら、ライブラリにキーワードを追記しちゃうのがいいよなぁ。
でも、バージョンアップしたときや、似た列名が複数登場したときに困るか。
やっぱり各所で定義するのがいいのかな。