「Symfony」カテゴリーアーカイブ

symfony1.0系でphp5.3でエラー発生

symfony1.0系でphp5.3でエラー発生 - chiruboの日記
symfony framework forum: symfony 1.0 => Snow Leopard - longvarchar
Creoleの問題らしい。
lib/vendor/creole/CreoleTypes.phpで、
TEXTとLONGVARCHARに同じ値(17)が代入されているため、$affixMapと$creoleTypeMapでキーが重複していて、self::LONGVARCHARが捨てられている。(PHP5.3の場合)
そのため、schema.ymlでtypeにLONGVARCHARを指定している場合に、
./symfony propel-build-modelで

Unable to return 'affix' for unknown CreoleType

が発生する。
解決法は、TEXTに使用されていない整数値を割り当てることにより、TEXTとLONGVARCHARの値が重複しないようにする。
lib/vendor/creole/CreoleTypes.php

//const TEXT = 17;
const TEXT = 30; //php 5.3.0 fix, using an unused int

その他
Is symfony-1.0 compatible with php-5.3 ? - symfony users | Google グループ

ヘルパー関数をアクション内で使う

ヘルパー関数をアクション内で使う « symfonyで開発日記
action内でhelper関数を使用したい場合は、sfLoader::loadHelpersでヘルパーをロードすればよいが、使用するヘルパーだけでなく、それが依存するヘルパーもsfLoader::loadHelpersで指定する必要がある。
たとえばアクションで、

sfLoader::loadHelpers(array('Url'));
echo mail_to('xxx@xxxx.xxx');

とやると、

Fatal error: Call to undefined function _parse_attributes() in /Users/pistolfly/sfprojects/reserve/lib/vendor/symfony/lib/helper/UrlHelper.php on line 312

というエラーになってしまう。
以下のようにすればOK。

sfLoader::loadHelpers(array('Tag', 'Url'));
echo mail_to('xxx@xxxx.xxx');

sfPropelPagerのgetNbResultsがおかしい

Y2 BLOG » [symfony]sfPropelPagerのgetNbResultsがおかしい
sfPropelPager使用時の注意点
・setPeerMethodしたら、必ずsetPeerCountMethodする。そうしないと、件数がおかしくなる可能性がある。(セットしない場合のデフォルトがそれぞれ'doSelect'、'doCount'なので。)
・addGroupByColumnしたら、必ずsetDistinctする。

propelの日付と時刻のデフォルト値が1.0.9ではロケールに従った出力に変更された。が1.0.10で元に戻った。

symfony propelでの日付のデフォルト値 : アシアルブログ
symfony 1.0.9 で、日付型(date)と時刻型(time)propel generator で生成されるコードが以下のように変わった。(datetimeとtimestampは変更なし)
が、1.0.10で元に戻った
Changeset 6337 - symfony - Trac
symfonyでのpropel generatorのデフォルトの設定は、
/lib/vendor/propel-generator/default.properties
だということが分かった。
1.0.8

public function getDate($format = 'Y-m-d')
{
  ...
}
public function getTime($format = 'H:i:s')
{
  ...
}

1.0.9

public function getDate($format = '%x')
{
  ...
}
public function getTime($format = '%X')
{
  ...
}

propel.ini に以下を追加してモデルをリビルドすると、1.0.9でも1.0.8までと同じコードが生成されるようになる。

propel.defaultDateFormat = Y-m-d
propel.defaultTimeFormat = H:i:s

が、1.0.10で元に戻ったので、1.0.10にアップグレードしてモデルをリビルドすれば上記対応は不要になる。