想象三个实体 - 帐户,地址,购买。帐户与地址具有一对多关系。购买与帐户相关,但与地址无关 - 但是它确实有一个地址的文本字段(这是因为地址可以更改,我不希望地址直接相关)。在用户帐户页面上,他们可以添加地址。登录到站点时,购买 ID 存储在会话中,并用于在需要时检索购买详细信息。
我想在结帐页面上显示用户当前在<选择>中拥有的所有地址的列表,允许他们选择一个地址,并更新当前购买中的地址。 $account->getAddresses() 存在,将显示与用户相关的地址。选择>
我已经阅读了 http://symfony.com/doc/current/reference/forms/types/collection.html 和 http://symfony.com/doc/current/cookbook/form/form_collections.html,但看不到如何将其应用于这种情况,尽管嵌入式表单并不是真正必要的 - 我不想在那个阶段更改购买的其他细节。
所以我的问题是(至少是其中之一):如何将 $account->getAddresses() 的结果传递给表单类型?或者在表单类型中,我是否应该使用实体字段类型,如果是这样,如何获取自定义query_builder以在表单类型中包含当前用户?或者我应该怎么做?
您需要将实体传递给 Type 的构造函数,然后使用它来获取参数。
Class YourType extends AbstractType
{
private $account;
public function __construct($account)
{
$this->account = $account;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$accountId = $account->getAccountId();
$builder->add('addressId',
'entity',
array('class' => 'YourBundle:Address',
'query_builder' => function(EntityRepository $er) use ($accountId) {
return $er->createQueryBuilder('a')
->where('a.accountId = ?1')
->setParameter(1, $accountId)));
}
}