【问题标题】:Set selected value on entity field (Symfony Forms)在实体字段上设置选定值(Symfony 表单)
【发布时间】:2015-03-10 17:06:43
【问题描述】:

我正在使用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);
            }
        ))
    ;
}

如您所见,我尝试设置 data 属性 没有结果。 空值 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>

但仍未被选中。我做错了什么?

【问题讨论】:

    标签: php symfony symfony-forms sonata-admin sonata


    【解决方案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');
        }
    ))
    

    它自动选择数据库值并在没有选择时设置empty_value。如果它在您的项目中不起作用,我不知道。

    【讨论】:

    • 然后他总是选择empty_value。重要的是我的类别不在选择列表中,这就是为什么我有第二个“andWhere”
    • 在我的例子中,'empty_value' 是设置默认值的方式(不涉及注入、id 的索引或选择)。谢谢老兄!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多