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

标签 forms symfony

我有一个实体,有一个数组类型属性: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.在我的 Product 实体中定义了 productKey:

 /**
         * @var array $productKey
         *
         * @ORM\Column(name="productKey", type="array",nullable=true)
         */
        private $productKey;

3.在我的 Controller 中:

$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 的值!它只是出现一个空的选择输入。 我该如何解决?

最佳答案

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

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('productKey', 'choice', array(
            'choices' => array('1' => 'one', '2' => 'two', '3' => 'three'),
        ))
    ;
}

如果您的选择来自服务,您可以创建自定义 product_key 表单类型并在服务容器中配置它。

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_key_choices 选项(通过将 'product_key_choices' => array() 添加到 getDefaultOptions) 并从你的 Controller 传递选项。这更容易启动和运行,但便携性较差,因为您每次使用表单时都需要传递此选项。

关于forms - 如何在 Symfony2 的选择表单字段中列出数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8721212/

相关文章:

php - Symfony 默认 Controller 白页

python - Django-forms : 'WSGIRequest' object has no attribute 'get' 问题

php - 如何允许只从一个域上传 PHP?

php - 在实体库或任何地方访问 Symfony 配置参数

php - Symfony2 + Twig : Using an entity type field to store unsaved entities

symfony - 在 symfony 3 中添加 Google API 客户端库

html - 无论我尝试什么,表单都不会在 css 中移动

javascript - 禁用克隆对象 jquery 中的链接、表单提交操作和模式弹出窗口

php - Joomla RSForm Pro 动态下拉菜单

node.js - Assetic、twitter bootstrap 等