Symfony 2:访问FormBuilder中的数据库
发布时间:2020-12-12 08:53:44 所属栏目:MsSql教程 来源:网络整理
导读:我正在构建一个包含名为“category”的字段的表单,我需要一个选择列表来做到这一点,但是我不知道如何用数据库中存储的几个类别来填充这个选择列表. public function buildForm(FormBuilder $builder,array $options) { $builder - add('item','text',array('l
我正在构建一个包含名为“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参数可用.将其传递到如上所述的回调. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |