Campos customizados em filtro no Symfony 1.4

Olá! Neste post vamos mostrar como incluir campos customizados para o seu filtro, no admin generator.
Atenção! Este tutorial é relativo à versão 1.4 do Symfony!
Contextualizando, imagine que temos uma tabela Product com a seguinte estrutura:
name: bicycle quantity: 1500 quantity_alarm: 50
Imagine agora que precisaríamos de um campo no nosso filtro para exibir ao usuário quais são os produtos que estão com a quantidade baixa, utilizando o campo quantity_alarm como referência. Como fazer isto? Simples!
Primeiramente vamos alterar a seção filters do nosso generator.yml, incluindo o nosso novo campo do filtro:
filter: display: [ alarming ]
Em nosso ProductFormFilter.class.php teremos que fazer as seguintes alterações:
public function configure() { // ... $this->manageFieldAlarming(); } protected function manageFieldAlarming() { $this->widgetSchema ['alarming'] = new sfWidgetFormChoice(array( 'choices' => array( '' => 'yes or no', 1 => 'yes', 0 => 'no' ))); $this->validatorSchema ['alarming'] = new sfValidatorPass(); }
Além disso, devemos sobrescrever o método getFields…
public function getFields() { $fields = parent::getFields(); $fields['alarming'] = 'alarming'; return $fields; }
…e criar o método para tratar o novo campo:
public function addAlarmingColumnQuery($query, $field, $value) { Doctrine::getTable('Product') ->applyAlarmingFilter($query, $value); }
Pronto! Agora com o filtro atualizado, devemos criar nosso método para realizar a busca de acordo com os nossos parâmetros.
static public function applyAlarmingFilter($query, $value) { $rootAlias = $query->getRootAlias(); switch ($value) { case '0': $query->where($rootAlias.'.quantity > '.$rootAlias.'.quantity_alarm'); break; case '1': $query->where($rootAlias.'.quantity <= '\.$rootAlias.'.quantity_alarm'); break; } return $query; }
Desta maneira, teremos um novo campo no filtro para exibir os produtos de acordo com a necessidade do usuário.
Bem, qualquer dúvida ou sugestão utilize o comentário.
Até mais!