Symfony 2:访问FormBuilder中的数据库
发布时间:2020-05-23 06:26:40 所属栏目:MsSql 来源:互联网
导读:我正在构建一个包含名为“category”的字段的表单,我需要一个选择列表来做到这一点,但是我不知道如何用数据库中存储的几个类别来填充这个选择列表. public function buildForm(FormBuilder $builder, array $options) { $builder - add(item, text, array(lab
|
我正在构建一个包含名为“category”的字段的表单,我需要一个选择列表来做到这一点,但是我不知道如何用数据库中存储的几个类别来填充这个选择列表. public function buildForm(FormBuilder $builder,array $options) {
$builder -> add('item','text',array('label' => 'Item'));
$builder -> add('category','choice',array(
'choices' => ???,'label' => 'Category'
));
}
如何从数据库中获取类别并使用它们构建我的表单? (似乎无法访问此类中的$this-> getDoctrine-> …). 解决方法使用类型实体而不是选择$builder
->add('entity_property','entity',array(
'class' => 'NamespaceToEntity','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'));
现在,该值应该通过youru buildForm方法的$options参数可用.将其传递到如上所述的回调. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
