Установить выбранное значение в поле объекта (Symfony Forms)

Я работаю с Sonata AdminBundle и хотел бы например, установить выбранное значение моего списка выбора.

У меня есть категория с полями: CategoryID, parentID, tag. parentID может быть NULL.

Код, как я создаю свою форму:

// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{        
    // If edit -> get tag and id from tag
    if($this->subject->getCategoryId() !== null)
    {
        $tag_current = $this->subject->getCategoryId()->getTag();
        $tag_current_id = $this->subject->getCategoryId()->getParentid()->getCategoryid();
    }

    $formMapper
        ->add('tag', 'text', array('label' => 'Tag'))
        ->add('name', 'text', array('label' => 'Naam'))
        ->add('nameEN', 'text', array('label' => 'Naam Engels', 'required' => false, 'data' => 'test'))
        ->add('parentcategory', 'entity', array(
            'class' => 'DX\MyBundle\Entity\Category',
            'empty_data'  => null,
            'empty_value' => "GEEN PARENT CATEGORIE",
            'required' => false,
            'data' => $tag_current_id,
            'query_builder' => function(EntityRepository $er) use ($tag_current) {

                return $er->createQueryBuilder('c')
                    ->where('c.parentid IS NULL')
                    ->andWhere('c.tag != :tag')
                    ->andWhere('c.tag != :tag_current')
                    ->setParameter('tag', 'FOTOGRAAF')
                    ->setParameter('tag_current', $tag_current);
            }
        ))
    ;
}

Как видите, я безрезультатно пытался установить свойство данных. Пустое значение NO PARENT CATEGORY всегда выбирается при загрузке страницы.

Мое $tag_current_id — это целое число, в данном случае: 11. И мой список выбора выглядит так:

<select id="s54ff22c20ca39_parentcategory" name="s54ff22c20ca39[parentcategory]" class="select2-offscreen" tabindex="-1" title="Parentcategory">
    <option value="">GEEN PARENT CATEGORIE</option>
    <option value="1">THEMA</option>
    <option value="11">FREEM SELECTIE</option>
</select>

Но до сих пор не выбран. Что я делаю не так?


person nielsv    schedule 10.03.2015    source источник


Ответы (1)


Ваш построитель запросов должен вернуть все доступные значения, он автоматически выберет значение вашей базы данных:

$formMapper->add('parentcategory', 'entity', array(
    'class' => 'DX\MyBundle\Entity\Category',
    'empty_data'  => null,
    'empty_value' => "GEEN PARENT CATEGORIE",
    'required' => false,
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('c')
                  ->where('c.parentid IS NULL')
                  ->andWhere('c.tag != :tag')
                  ->setParameter('tag', 'FOTOGRAAF')
    }
))

Обновление:

Это то, что я делаю в своем проекте:

$formMapper->add('supplier', 'entity', array(
    'class' => 'AcmeCoreBundle:ShopSupplier',
    'empty_value' => 'None',
    'empty_data' => null,
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('ss')
            ->orderBy('ss.name', 'ASC');
    }
))

Он автоматически выбирает значение базы данных и устанавливает пустое_значение, когда ничего не выбрано. Если это не работает в вашем проекте, я понятия не имею.

person HypeR    schedule 11.03.2015
comment
Затем он всегда выбирает empty_value. И важно, что моей категории нет в списке выбора, поэтому у меня есть вторая и Где - person nielsv; 11.03.2015
comment
В моем случае 'empty_value' был способом установить значение по умолчанию (без возни с инъекцией, индексом идентификатора или выбором). Спасибо приятель! - person nicolallias; 10.03.2016