2017-08-09 63 views
1
class User 
{ 
    public $id; 
    public $username; 

    public function getCompanies() 
    { 
     //stuff 
    } 
} 

class Company 
{ 
    public $id; 
    public $name; 

    public static function getForUser(User $user) 
    { 
     //stuff 
    } 
} 

Symfony的自定義ChoiceType我具備上述兩個模型,並希望創建一個可重複使用的自定義字段ChoiceType,這將是基於用戶對象的過濾Company ID(或物體)的選擇框。如果沒有提供User,則有一個ChoiceType(選擇框)的所有公司對象。過濾其它對象

我該如何解決這個問題?我一直在閱讀Symfony文檔,並且似乎無法找到類似於我的需求的任何示例。

我可以使用公司類中的getForUser()或用戶類中的getCompanies()(他們幾乎完成同樣的事情)。

公司和用戶之間沒有直接關係。他們通過其他對象/表格(經理/客戶/聯繫人)「加入」。

class CompanyType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('company', ChoiceType::class, array(
      "choices" => ?????? 
     )); 
    } 

    public function getParent() 
    { 
     return ChoiceType::class; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => Company::class, 
     )); 
    } 

} 

所有幫助將不勝感激。

+2

你看着https://symfony.com/doc/current/form/dynamic_form_modification.html? –

+0

我做了類似的事情,我使用的方法是創建一個「聯繫人」實體,通過公司ID和與其關聯的人員確定聯繫人。該選擇基於提供既定聯繫人和尚未被確定爲聯繫人的用戶的查詢。我的解決方案使用了Ajax,所以字段類型是文本,並帶有JSON後端。 – user2182349

+0

@JasonRoman我做到了。我無法弄清楚如何正確使用'如何動態生成基於用戶數據的表單'。 – WhiteFire

回答

1

我建議你試試這個鏈接:

https://symfony.com/doc/current/reference/forms/types/entity.html#using-a-custom-query-for-the-entities

use Doctrine\ORM\EntityRepository; 
use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
// ... 

$builder->add('users', EntityType::class, array(
    'class' => 'AppBundle:Company', 
    'query_builder' => function (EntityRepository $er) { 
     return $er->createQueryBuilder('u') 
      ->orderBy('u.name', 'ASC'); //or DESC 
    }, 
    'choice_label' => 'username', 
)); 
+0

謝謝。我認爲你給出並鏈接到的是一個如何獲得「用戶」對象的選擇框的例子,但我想要一個基於用戶屬於哪個公司的「公司」對象的選擇框。 – WhiteFire