我有一个实体,有一个数组类型属性: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/