Symfony 2:访问FormBuilder中的数据库

前端之家收集整理的这篇文章主要介绍了Symfony 2:访问FormBuilder中的数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个包含名为“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' => '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'));

现在,该值应该通过youru buildForm方法的$options参数可用.将其传递到如上所述的回调.

猜你在找的MsSQL相关文章