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!