Symfony – Добавляем кастомные поля в фильтр (custom fields in filter)

Не большая заметка о добавлении кастомных полей в фильтр. Вообще работа с фильтрами это тоже или почти тоже что и работа с формами, по крайней мере мне так показалось…

Первым что необходимо сделать это определить виджет и валидатор для нашего поля “testrecord” в файле форм demoFormFilter.class.php

publicfunction configure()
  {
    $this->widgetSchema['testrecord']=new sfWidgetFormInput();
    $this->validatorSchema['testrecord']=new sfValidatorPass();

    $this->widgetSchema->setLabel('testrecord','test record label message');

    $this->widgetSchema->setHelp('testrecord','test record help message');
  }

Объявили для нашего столбца виджет, валидатор, метку для формы, и доп. сообщение. Теперь необходимо добавить наш запрос для обработки этого поля, для этого в тот же файл формы дописываем функцию:

  publicfunction addTestrecordColumnQuery(Doctrine_Query $query,$field,$values)
  {
    if(!is_array($values))
    {
      $values=array($values);
    }

    if(!count($values))
    {
      return;
    }

    $query->andWhere($query->getRootAlias().'. testrecord = ?',$values);
  }

Добавили к уже имеющемуся запросу, запрос на получение данных в которых присутствует заданное условие, при условии, что мы вообще что-то фильтруем используя наше поле…

И последний шаг – добавляем наше поле к уже имеющимся:

  publicfunction getFields()
  {
    $fields=parent::getFields();
    $fields['testrecord']='Number';
    return$fields;
  }

Теперь наше поле готово и будет отображаться в фильтрах и собственно работать как и описали

в последнем пункте $fields[‘название_поля’] = ‘тип_поля’;

тип поля может быть Number, Manykey, String – может еще что-то есть не помню

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: