2014-10-03 23 views
0

我遇到了Symfony 2.5的一些問題我需要dinamicaly修改基於一些參數,我必須從控制器傳遞,但我無法初始化$ options數組添加到任務。問題注入參數query_builder裏面的buildForm Symfony 2.5

我的文件:

// ordersContrroller.php 
     $orders=new OrdersM(); 

      $form = $this->createForm(new ListOrdersType(), $orders, array('id'=>1)); 

    // ListOrdersType.php 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\Form\FormEvent; 
use Symfony\Component\Form\Event\DataEvent; 
use Symfony\Component\Form\FormEvents; 
use Doctrine\ORM\EntityRepository; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 


class ListOrdersType extends AbstractType 
{ 
    public function getDefaultOptions(OptionsResolverInterface $resolver) 
     { 
      $resolver->setDefaults(array(
        'data_class' => 'Acme\MyBundle\Form\Model\OrdersM', 
        'id'=>1,   
      )); 

     } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     var_dump(array_keys($options)); 
     $builder->add('orders', 'entity', array(
       'class' => 'AcmeMyBundle:Orders', 
       'property' => 'name', 
       'query_builder' => function($repository) use ($options) { 
         return $repository->createQueryBuilder('o') 
         ->where('o.id='.$options['id']) 
         ->orderBy('o.id', 'ASC') 
         ; 
        } 
     )); 
    } 
    public function getName() 
    { 
     return 'orders'; 
    } 
} 

我有兩個不同的問題。當我把選擇陣列中的車控制器 陣列(「ID」 => 1)

我recive以下錯誤:

The option "id" does not exist. Known options are: "action", "attr", "auto_initialize", "block_name", "by_reference", "cascade_validation", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_provider", "csrf_token_id", "csrf_token_manager", "data", "data_class", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "intention", "invalid_message", "invalid_message_parameters", "label", "label_attr", "mapped", "max_length", "method", "pattern", "post_max_size_message", "property_path", "read_only", "required", "translation_domain", "trim", "validation_groups", "virtual"

喜歡的選項的缺省選項的聲明中未聲明解析器。

而且當然啦,當我嘗試在query_builder功能我得到以下錯誤使用$選項陣列上的鍵$選項[「身份證」]:

Notice: Undefined index: id in ****/Form/Type/ListOrdersType.php line 56

是OFC是這一個:

->where('o.id='.$options['id']) 

id $選項是ony之一,但我真的需要在EntityType.php文件中做我的查詢dinaic跟隨differents參數,我真的需要通過某些方式在選項上傳遞它們。

我失蹤了什麼?發送你的時間。

+0

你爲什麼串聯你的價值觀,而不是使用綁定?嘗試使用'setParameter()'。 – sjagr 2014-10-03 13:23:51

回答

0

嘗試像這樣(getDefaultOptions改爲setDefaultOptions):

class ListOrdersType extends AbstractType 
{ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
     { 
      $resolver->setDefaults(array(
        'data_class' => 'Acme\MyBundle\Form\Model\OrdersM', 
        'id'=> null,   
      )); 

     } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    {  
     $builder->add('orders', 'entity', array(
       ... 
       'query_builder' => function($repository) use ($options) { 
         return $repository->createQueryBuilder('o') 
         ->where('o.id= :id') 
         ->orderBy('o.id', 'ASC') 
         ->setParameter('id', $options['id']) 
         ; 
        } 
     )); 
    } 

    ... 
} 

$orders=new OrdersM(); 
$form = $this->createForm(new ListOrdersType(), $orders, array('id'=>1)); 
+0

我不能看到eheh,不過你給我很大的幫助。現在翻譯作品。 – groot 2014-10-03 16:30:19