Как установить по умолчанию поле выбора filter_checkbox с symfony2.0?

В заголовке сказано почти все, но вот фрагменты моего кода, чтобы проиллюстрировать, что я пытаюсь сделать.

Вот тип формы

//[...]
class ActivityFilterType extends AbstractType
{
  //[...]
  public function buildForm(FormBuilder $builder, array $options)
  {
        $builder->add('filter_checkbox', 'choice', array(
                'label'    => $this->translator->trans('form.label.sexFilter'),
                'choices'  => array(1 => ucfirst($this->translator->transChoice('sex.female', 2)), 2 => ucfirst($this->translator->transChoice('sex.male', 2))),
                'multiple' => true,
                'expanded' => true,
                'required' => false,
                'empty_value' => false,
                /*
                   // those ones didn't make it
                   'attr'     => array( 1=>array('checked' => 'checked'), 2=>array('checked' => 'checked') ),
                   'preferred_choices' => array(1, 2),
                */
        ));
  }
  //[...]
}

И шаблон формы

<div class="filter-message">
    <div class="select-group">
        {{ form_label(form.filter_dropdown) }}
        <div class="input control-group filter" >
            {{ form_widget(form.filter_dropdown) }}
        </div>
    </div>
    <div class="checkbox">
        {{ form_label(form.filter_checkbox) }}
        {{ form_widget(form.filter_checkbox, {'attr':{'checked':checked}}) }} 
        <!-- that didn't do it neither -->
    </div>
</div>

Спасибо


person svassr    schedule 21.02.2013    source источник
comment
stackoverflow.com/questions/8073236 /   -  person Squazic    schedule 22.02.2013


Ответы (3)


Я последовал ответу @bentidy в предыдущем сообщении, указанном здесь @Squazic. Это довольно просто

Поэтому для меня, поскольку я хочу, чтобы по умолчанию был установлен флажок для обоих полов, мне пришлось добавить аргумент данных в виде массива (он принимает как одно значение, так и массив).

Это выглядит так:

//[...]
class ActivityFilterType extends AbstractType
{
  //[...]
  public function buildForm(FormBuilder $builder, array $options)
  {
    $builder->add('filter_checkbox', 'choice', array(
            'label'    => $this->translator->trans('form.label.sexFilter'),
            'choices'  => array(1 => ucfirst($this->translator->transChoice('sex.female', 2)), 2 => ucfirst($this->translator->transChoice('sex.male', 2))),
            'multiple' => true,
            'expanded' => true,
            'required' => false,
            'empty_value' => false,
            'data' => array(1,2) // female value is 1 and male value is 2
    ));
  }
  //[...]
}

Вот соответствующий документ: http://symfony.com/doc/2.0/reference/forms/types/field.html

Спасибо, парни

person svassr    schedule 01.03.2013

Вы делаете это в контроллере:

$activityFilter = new ActivityFilter();
$activityFilter->setFilterCheckbox(1);
$form = $this->createForm(new ActivityFilterType(), $activityFilter);
...

Кстати: вы не должны называть свой атрибут filter_checkbox, а скорее указывать, что хранится. Например sexFilterв данном случае.

person Dirk Olbertz    schedule 22.02.2013
comment
Привет Дирк. На самом деле у меня нет метода под названием setFilterCheckbox. Вы предлагаете мне создать его в ActivityFilterType (потому что у меня тоже нет класса ActivityFilter)? - person svassr; 22.02.2013
comment
Вы также можете просто использовать массив как $activityFilter. $activityFilter = массив('filter_checkbox' => 1). Возможно, для этого вам понадобится Symfony 2.1, а не 2.0. Но я не уверен. Обычно я использую сущности для своих форм для хранения значений в базе данных. - person Dirk Olbertz; 22.02.2013

Если у вас есть массив флажков, вы должны установить «данные» в массив значений флажков, которые вы хотите сделать проверенными. Как это:

'data' =>array(0,1,2),'choices'=>array(0=>'Permitem Acesso Livre', 1=>'Exigem Cadastro', 2=>'Cobram Mensalidades ou Taxas')

Вот и все.

person Leandro SG    schedule 03.09.2013