2015-08-27 34 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是更好