Campos customizados em filtro no Symfony 1.4

Publicado segunda-feira, 4 de junho de 2012

symfony

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!

Receba notícias no seu e-mail

Vamos te enviar nossas matérias para você ficar por dentro.

Compartilhe este conteúdo

Rolar para cima

Seu sucesso digital começa aqui. Entre em contato para começar uma nova jornada com sua empresa.

(31) 99890-5482

× Fale com a gente no Whatsapp