2013-08-14 3 views
2

В настоящее время я использую Sonata Admin для создания datagrid с сущностью, имеющей логическое поле read. Я хотел бы отфильтровать это свойство, установив его по умолчанию на false.Sonata admin: установка фильтра по умолчанию по умолчанию?

Итак, я добавил следующее в мой класс администратора:

protected $datagridValues = array(
    'read' => array('value' => false), 
); 

Тем не менее, это не похоже на работу. Сформированный список выбора заключается в следующем:

<select id="filter_read_value" name="filter[read][value]" class="span8"> 
    <option value=""></option> 
    <option value="1">oui</option> 
    <option value="2">non</option> 
</select> 

Я полагаю, что это нормально, так как value для ложной будет 0, что является пустой вариант.

Таким образом, я использовал некоторые константы, такие как:

const STATUS_READ = 1; 
const STATUS_UNREAD = 2; 

Это работает, но мне интересно, есть ли правильное решение, чтобы избежать этих двух ненужных констант?

ответ

0

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

+0

На самом деле, в базе данных, это просто логическое. Вот почему я предпочитаю использовать атрибут 'false'. –

4

Вы можете использовать getFilterParameters может быть:

<?php 
public function getFilterParameters() 
{ 
    $this->datagridValues = array_merge(array(
      'booleanField' => array(
       'value' => '0', 
      ) 
     ), 
     $this->datagridValues 

    ); 
    return parent::getFilterParameters(); 
} 
0

лучшим решением было бы использовать типы сонатной администратора:

<?php 
protected $datagridValues = [ 
    'read' => [ 
     'type' => Sonata\CoreBundle\Form\Type\EqualType::TYPE_IS_EQUAL, 
     'value' => Sonata\CoreBundle\Form\Type\BooleanType::TYPE_NO, 
    ] 
]; 
Смежные вопросы