使用 formbuilder 在组合框中选择默认值

Posted

技术标签:

【中文标题】使用 formbuilder 在组合框中选择默认值【英文标题】:Selecting default value in a combobox using formbuilder 【发布时间】:2012-05-01 07:00:25 【问题描述】:

我在尝试使用 Symfony2 FormBuilder 选择组合框(html 选择标签)中的默认值时遇到问题。这是我的代码:

MyController.php 我发送到Form th 默认省份被选中

$n = new Foo();

$em = $this->getDoctrine()->getEntityManager();
$province = $em->getRepository('MyEntityBundle:SYS_TProvince')->find('ES-M');

$form = $this->createForm(new NewsletterType($province), $n);

$request = $this->getRequest();
if ($request->getMethod() == 'POST') 
    $form->bindRequest($request);

    if ($form->isValid()) 
        // some action
    

NewsletterType.php我在省份字段中使用默认省份

class NewsletterType extends AbstractType

    private $province;

    function __construct($province)
    
        $this->province = $province;
    

    public function buildForm(FormBuilder $builder, array $options)
    
        $builder->add('idnewsletter', 'hidden');
        $builder->add('email', 'email');
        $builder->add('type', 'entity', 
            array('label' => 'type',
                'class' => 'MeediamSplashBundle:USR_TType',
                'property' => 'description',
                'preferred_choices' => array(3,5,7)
            ));
        $builder->add('province', 'entity', 
            array('label' => 'province',
                'class' => 'MeediamSplashBundle:SYS_TProvince',
                'property' => 'name',
                'data' => $this->province
            ));
        $builder->add('postalcode');
        $builder->add('status', 'hidden');
        $builder->add('created', 'hidden');
    

    public function getName()
    
        return 'newsletter';
    

SYS_TProvince.php实体

<?php

namespace SciOf\Meediam\SplashBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity
 * @ORM\Table(name="SYS_TProvince")
 */
class SYS_TProvince

    /**
     * @ORM\Id
     * @ORM\Column(type="string", length=5, nullable=false)
     */
    protected $idprovince;

    /**
     * @ORM\Column(type="string", length=3, nullable=false)
     * @Assert\NotBlank()
     */
    protected $idcountry;

    /**
     * @ORM\Column(type="string", length=60, nullable=false)
     * @Assert\NotBlank()
     */
    protected $name;

    public function getIdprovince()              return $this->idprovince; 
    public function getIdcountry()               return $this->idcountry; 
    public function getName()                    return $this->name; 
    public function setIdprovince($idprovince)   $this->idprovince = $idprovince; 
    public function setIdcountry($idcountry)     $this->idcountry = $idcountry; 
    public function setName($name)               $this->name = $name; 

    public function __toString()                 return $this->idprovince; 


显然一切都很好,但它不起作用。如果我使用“preferred_choices”,它可以工作,但我无法通过“数据”选择默认值。

对象在类中,如果我使用 ->getIdProvice() 我会得到对象的 PK,并且因为是字符串而出错。

我阅读了一些信息,但我不知道该怎么做:

How to set default value for form field in Symfony2? http://symfony.com/doc/current/reference/forms/types/field.html

有人看到任何错误吗?

【问题讨论】:

【参考方案1】:

如果你想要一个默认值,你需要在创建表单之前在你的实体中设置你的默认值。

点赞$yourEntity-&gt;setProvince('my default value');

但在你的情况下,我不确定 setter,你能添加你的实体吗?

【讨论】:

我已经发布了实体。我必须在哪里添加此代码?控制器?表单生成器? oups 很抱歉迟到了,你必须在你的 $form = $this-&gt;createForm(new NewsletterType($province), $n); 之前添加这个,在你的情况下 $entity 应该是 $n 并且你只需要设置你的省份(或者如果你有关系,则为倍数两个实体之间),希望我很清楚。 它有效。谢谢....但是,出于好奇,如果我使用的是没有实体类的表单?? 好问题。我不知道,永远不要尝试,但我认为即使没有实体,您也必须创建一个假对象来创建您的表单。所以也许你可以对实体做同样的事情...... 我就是这样做的,创建一个假的“表单实体”以与 FormBuilder 一起使用。

以上是关于使用 formbuilder 在组合框中选择默认值的主要内容,如果未能解决你的问题,请参考以下文章

组合框中的默认选择列表值 - LWC

从组合框中选择下一个项目,然后单击 Excel VBA 按钮

在 Access 的组合框中自动选择一个值

每次使用 access vba 在第一个组合中选择值时,清除链接组合框中的值

WPF 组合框 - 选择第一项作为默认值

将 Microsoft Access 组合框中的默认值设置为当前月份