我有一个实体
Product:
name # string
country # entity
categories #entity many-many
我有一个该实体的表单
产品型号: 名称 类
现在我需要按国家/地区筛选类别,但是当我构建表单时我不想显示国家/地区参数
//...
$entity = new Entity\Product();
$entity->setCountry($this->getUser()->getProfile()->getCountry());
$form = $this->createForm(new Form\ProductType(), $entity);
return array('form' => $form->createView());
我希望在ProductType类中按国家/地区筛选类别,如何实现此目的?
如何将$ country值传递给查询构建器?
//...
->add('categories', 'entity', array(
'class' => 'MyBundle:Category',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBulder('c');
}
)
答案 0 :(得分:7)
您正在寻找可以传递给表单类的options
数组。
将其添加到您的FormType:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'country' => null
));
}
然后像这样调用FormType
:
$this->createForm(new Form\ProductType(), $entity, array(
'country' => $country
));
并访问$country
方法中的buildForm
,如下所示:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$country = $options['country'];
从那里开始,您可以构建自己的queryBuilder,以便只选择您需要的产品。
修改强>
要访问queryBuilder中的$country
变量,您应该使用use
statement。它看起来像这样:
->add('categories', 'entity', array(
'class' => 'MyBundle:Category',
'query_builder' => function (EntityRepository $er) use($country) {
// here you can use the $country variable in your anonymous function.
return $er->createQueryBuilder('c');
}
)
)