2015-06-20 36 views
1

我創建了我的Symfony2的表單類型形式和我用於用戶實體類型來選擇他/她的地址,從這樣的:symfony的實體形式的類型與相關數據

$builder->add('sladdress', 'entity', array(
    'class' => 'myClass\UserBundle\Entity\UserAddresses', 
    'property' => 'address', 
    'label' => 'label.your_addresses_list', 
    'translation_domain' => 'labels', 
    'mapped' => false 
)); 

我有一個UserAddresses實體它與Users Entity具有ManyToOne關係並保存用戶的地址。 問題依然存在,我該怎麼做才能讓sladdress類型只加載用戶擁有的地址?(默認情況下,sladdress表單字段會加載此實體中存在的所有地址) 什麼是快速方式?

回答

1

我找到了解決辦法,我們應該用symfony的表單類型的「query_builder」的說法是這樣的:

$builder->add('sladdress', 'entity', array('class' => 'myClass\UserBundle\Entity\UserAddresses', 'property' => 'address', 'label' => 'label.your_addresses_list', 'translation_domain' => 'labels', 'mapped' => false, 
    'query_builder' => function (EntityRepository $er) { 
     return $er->createQueryBuilder('u') 
      ->where('u.user = ?1') 
      ->setParameter(1, $this->context->getToken()->getUser()); 
    },)); 

但我們應該注意的是,我們不能用這個 - $>上下文symfony的formTypes所以我們應該在這個formType創建一個私有變量名爲$背景是這樣的:

private $context; 

,然後在此創建formType構造方法,讓來自調用該控制器的形式 - $> createFromBuilder安全上下文()在此表單上輸入:

public function __construct($context) 
{ 
    $this->context = $context; 
} 

,最後當我們調用控制器中的FormType與傳遞的SecurityContext作爲參數傳遞給它,就像這樣:

$form = $this->createForm(new SelectAddressType($this->get('security.context')), null, array(
     'action' => $this->generateUrl('frontend_order_checkout', array('vendor_code' => $vendor_id)), 
    )); 
+1

爲什麼你通過整個security.context,而你可以通過只從用戶令牌? – DonCallisto

+0

另外,您的安全上下文令牌可以返回匿名。用戶 – stevenll

+0

@DonCallisto是的,我可以傳遞用戶從令牌,但我可能需要在未來的上下文中的其他東西 – Mohammad

相關問題