Я никогда не слышал о другом способе ... взгляните на класс sfFormFilterDoctrine
, расположенный в lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\form
, чтобы понять, как работает эта система и как вы можете написать свой addFieldnameColumnQuery
UPDATE
Чтобы изменить только поведение фильтра для поля, скажем, myfield
, с внешний ключ на обычный текст , вы можете просто установить виджет и переопределить getFields()
в MymoduleFormFilter
классе с помощью некоторый код, подобный этому:
public function configure()
{
$this->setWidget('myfield', new sfWidgetFormFilterInput());
$this->setValidator('myfield', new sfValidatorPass(array('required' => false)));
}
public function getFields()
{
$fields = parent::getFields();
$fields['myfield'] = 'Text';
return $fields;
}
Вместо этого, если вы определяете поле для поиска в объединенной таблице, вам еще предстоит установить виджет в соответствии с именем поля, которое вы написали в generator.yml
filter:
display: [... some fields ..., myfield]
и, наконец, добавьте addMyfieldColumnQuery(Doctrine_Query $query, $field, $values)
внутри join и где code. Извините, для этого нет фрагмента, потому что я использую Propel.