sfFormFilterPropel::addNumberCriteria(メモ)

SynfonyのAdminGeneratorで管理画面を生成した時に、リストのフィルタ(検索)クエリの生成に使われる部分

http://trac.symfony-project.org/browser/branches/1.2/lib/plugins/sfPropelPlugin/lib/form/sfFormFilterPropel.class.php#L187

<?php
187	  protected function addNumberCriteria(Criteria $criteria, $field, $values)
188	  {
189	    $colname = $this->getColname($field);
190	
191	    if (is_array($values) && isset($values['is_empty']) && $values['is_empty'])
192	    {
193	      $criterion = $criteria->getNewCriterion($colname, '');
194	      $criterion->addOr($criteria->getNewCriterion($colname, null, Criteria::ISNULL));
195	      $criteria->add($criterion);
196	    }
197	    else if (is_array($values) && isset($values['text']) && '' != $values['text'])
198	    {
199	      $criteria->add($colname, $values['text']);
200	    }
201	  

後半のelse ifで「'' != $values['text']」という評価がありますが、addNumberCriteriaを利用する数値フィールドの場合、フォーム側ではsfValidatorIntegerなどが利用されており、$values['text']の中身はinteger値になっています。

なので、「1」や「2」という入力については条件が成立しますが、「0」という入力の場合、PHPでは「'' != $values['text']」が成り立たないため、条件がスルーされてしまいます。



sfValidatorIntegerを経由する限り、入力値がintvalを経由するので、空の場合と0の場合を区別できないんですよね・・・。
この矛盾を回避するには、sfValidatorIntegerを使うのをあきらめる方向しかないでしょうか・・・。


[2010/02/13追記]
symfony 1.3.2/1.4.2で修正されたようです