如果我在我的表单中显示"实体"类型的字段,并且我想根据从控制器传递的参数过滤此实体类型,我该怎么做...?
//PlumeOptionsType.php
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('framePlume', 'entity', array(
'class' => 'DessinPlumeBundle:PhysicalPlume',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('pp')
->where("pp.profile = :profile")
->orderBy('pp.index', 'ASC')
->setParameter('profile', ????)
;
},
));
}
public function getName()
{
return 'plumeOptions';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Dessin\PlumeBundle\Entity\PlumeOptions',
'csrf_protection' => true,
'csrf_field_name' => '_token',
// a unique key to help generate the secret token
'intention' => 'plumeOptions_item',
);
}
}
Run Code Online (Sandbox Code Playgroud)
在控制器内部,我创建表单:
i have that argument that i need …Run Code Online (Sandbox Code Playgroud) $repository = $this->getDoctrine()->getRepository('ParabolaEntityBundle:ProjectAllocation');
$query = $repository->createQueryBuilder('p')
->where('p.startDate < :sdate and p.employee = :emp and p.endDate > :edate')
->setParameter('sdate', date('Y-m-d', time()))
->setParameter('edate', date('Y-m-d', time()))
->setParameter('emp', $employee->getId())
->getQuery();
$projectAllocate = $query->getResult();
Run Code Online (Sandbox Code Playgroud)
我如何在FormType类中使用上面的代码.我正在使用此查询为表单生成器中的选择类型生成数组.
我已找到更多关于此的答案,但返回错误"选项"prova"不存在"
我做到了这一点 defaultcontroller.php
$form = $this->createForm(new ProvinciaType(), $provincia, array('prova' => 'ciao'));
Run Code Online (Sandbox Code Playgroud)
在 ProvinciaType.php
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('name', 'entity', array(
'class' => 'AcmeIndexBundle:Provincia',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.name', 'ASC');
},'empty_value' => $options['prova']
));
}
Run Code Online (Sandbox Code Playgroud)
但为什么不工作?