2015-08-27 32 views
1

我想使用Symfony 2窗体来轻松地在我的控制器中使用Doctrine findBy API。symfony 2窗体:我想使用自定义字段名称属性或操作子窗体

其实,我想在我的控制器来写这个代码:

$repository->findBy(
    $request->get('filters'), 
    $request->get('orderBy'), 
    $request->get('limit'), 
    $request->get('offset') 
); 

对于这一点,我的网址应该是这样的!

  • /会话?过滤器[用户] = 4
  • /会话?过滤器[用户] = 4个&滤波器[年] = 2014 & ORDERBY =日期&限制= 10

要能够把这个功能给我的用户,一个解决方案,我喜欢使用形式:

解决方法n°1

$this->createFormBuilder() 
     ->add('filters', 'array') 
      ->add('user', 'integer') 
      ->add('year', 'integer') 
     ->add('orderBy') 
     ->add('limit') 
     ->add('offset') 
     ; 

但是这个解决方案或等价物不存在。 (类型数组不存在)

解决方法n°2

$this->createFormBuilder() 
     ->add('filters[user]', 'integer') 
     ->add('filters[year]', 'integer') 
     ->add('orderBy') 
     ->add('limit') 
     ->add('offset') 
     ; 

'[' 和 ']' 的使用字符不准,并产生误差。

另一个解决方法是使用自定义字段的名称,实际上是第一个解决方案(不unexistant式“阵列”)将产生此HTML:

<input type="text" id="form_filters" name="form[filters]" required="required" class="form-control"> 

,不会服的URL要求。有人知道如何使用自定义名称属性吗? 它也可以工作如果我有机会将属性名称更改为窗体[filters] [something]或甚至更好filters [something]

回答

0

我不确定,因为我从来没有这样做过,但是,为什么不尝试使用collection类型?

$this->createFormBuilder() 
    ->add('filters', 'collection', array(
     'choices' => array(
      'user', 
      'year', 
     ) 
    )) 
    [...] 

但是我不知道你想通过GET传递参数:如果你有一个表单和URL是不是从你的应用程序的“外部”调用,POST是更好