Задайте избрана стойност в полето за обект (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
Тогава той винаги избира празната_стойност. И е важно моята категория да не е в списъка за избор, затова имам второ и Къде - person nielsv; 11.03.2015
comment
В моя случай 'empty_value' беше начинът да задам стойността по подразбиране (без да се забърквам с инжектиране, индекс на id или избори). Благодаря пич! - person nicolallias; 10.03.2016