Forms 如何在Symfony2中的选择表单字段中列出数组

Forms 如何在Symfony2中的选择表单字段中列出数组,forms,symfony,Forms,Symfony,我有一个实体,有一个数组类型属性:productKey。我试图向表单中添加一个选项类型来显示productKey,我编写了代码: 1.我的表单类型: public function buildForm(FormBuilder $builder, array $options) { $builder ->add('heading','text',array('label'=>'title')) -&

我有一个实体,有一个数组类型属性:productKey。我试图向表单中添加一个选项类型来显示productKey,我编写了代码:

1.我的表单类型:

public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
                ->add('heading','text',array('label'=>'title'))
                ->add('productKey','choice',array(
                    'required'=>TRUE,
                    'label'=>'choose your product',
                ));
    }
2.在我的产品实体中,productKey的定义如下:

 /**
         * @var array $productKey
         *
         * @ORM\Column(name="productKey", type="array",nullable=true)
         */
        private $productKey;
3.在我的控制器中:

$entity = new Product();
$productKey = array("1"=>"one","2"=>"two","3"=>"three");
$entity ->setProductKey($productKey);
$formType = new TicketType($productKey);
$form = $this->createForm($formType,$entity);
return array(
     'form'=>$form->createView(),
     'entity'=>$entity
 );
运行项目时,无法列出productKey的值!它只是一个空的select chice输入。
我怎样才能解决它

您需要使用表单类型中的
choices
选项指定选项:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('productKey', 'choice', array(
            'choices' => array('1' => 'one', '2' => 'two', '3' => 'three'),
        ))
    ;
}
如果您的选择来自服务,则可以创建自定义
产品密钥
表单类型,并在服务容器中进行配置

services:
    product_key_form_type:
        class: ProductKeyFormType
        arguments:
            - @product_key_choices_provider
        tags:
            - { name: form.type, alias: product_key }
此表单类型类似于:

class ProductKeyFormType extends AbstractType
{
    private $provider;

    public function __construct($provider)
    {
        $this->provider = $provider;
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'choices' => $this->provider->getProductKeyChoices(),
        );
    }

    public function getParent(array $options)
    {
        return 'choice';
    }

    public function getName()
    {
        return 'product_key';
    }
}
并将在您当前的表单类型中使用,如下所示:

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('productKey', 'product_key')
    ;
}

如果所有这些都太多,您还可以向表单中添加一个
product\u key\u choices
选项(通过将
'product\u key\u choices'=>array()
添加到
getDefaultOptions
),然后只需从控制器中传递选项即可。这更易于启动和运行,但可移植性较差,因为每次使用表单时都需要传递此选项。

但我要传递的数组是通过服务中的函数。该函数必须在控制器中调用。例如:
code
$productKey=$This->get('someservice')->getProductKey($entity)
code
有没有办法在formType类中获取数组?非常感谢您的回答。我用了一种更简单的方法来解决这个问题。我只是在我的formType类中添加了一个构造函数,当我新建formType时,数组被传递。