使用 entity
类型代替 choice
类型
$builder
->add('entity_property', 'entity', array(
'class' => 'Namespace\\To\\Entity',
'query_builder' => function(EntityRepository $repository) {
return $repository->createQueryBuilder('q')
->where('q.a_field = yourvalue');
}
));
编辑:
两种在查询中使用自定义参数的方法。在这两种情况下,参数都是从外部注入的,因此您的FormType不需要任何与会话或请求对象等相关的引用。
1- 将所需参数传递给构造函数
class TaskType extends AbstractType
{
private $custom_value;
public function __construct($custom_value) {
$this->custom_value = $custom_value;
}
}
在你的 buildForm()
中,你必须将值复制到本地变量并使其对 query_builder
回调函数可用:
public function buildForm() {
$my_custom_value = $this->custom_value;
'query_builder' => function(EntityRepository $repository) use ($my_custom_value) {
return $repository->createQueryBuilder('q')
->where('q.a_field = :my_custom_value')
->setParameter('my_custom_value', $my_custom_value);
}
}
2- 使用 buildForm
方法的 $options
参数。
首先,您需要通过覆盖 getDefaultOptions
来定义默认值:
public function getDefaultOptions(array $options)
{
return array(
'my_custom_value' => 'defaultvalue'
);
}
你可以将其从控制器中作为 createForm
方法的第三个参数传递。
$this->createForm(new YourFormType(), $entity, array('my_custom_value' => 'custom_value'));
现在该值应该通过您的 buildForm
方法的 $options
参数可用。按照上述说明将其传递给回调函数。