我有一个窗体,SiteType,与其他窗体,DomainType,embbed。但是,当我尝试在网站表单中显示域名字段(这是一个选项列表)时,它显示3次(每个列表包含数据库中的所有域)而不是一次。
这是我SiteType:
class SiteType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text', array(
'label' => 'Nom du site',
'required' => true
))
->add('nameBundle', 'text', array(
'label' => 'Nom du bundle du site',
'required' => true
))
->add('numClient', 'integer', array(
'label' => 'Numéro client du site',
'required' => true
))
->add('domains', 'collection', array(
'type' => new DomainType(),
));
}
...
}
和我DomainType:
class DomainType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('domainName','entity', array(
'class' => 'EliophotBackBundle:Domain',
'property' => 'domainName',
'label' => 'Nom du domaine'
));
}
...
}
和形式,我展示形式:
<form action="{{ path('site_create') }}" method="post">
{{ form_row(form.name) }}
{{ form_row(form.nameBundle) }}
{{ form_row(form.numClient) }}
{% for domain in form.domains %}
{{ form_row(domain.domainName) }}
{% endfor %}
{{ form_rest(form) }}
<div class="btn-group">
<button type="submit" class="btn btn-success">Ajouter</button>
</div>
</form>
我SiteController:
public function newSiteAction()
{
$site = new Site();
$repository = $this->get('doctrine')
->getRepository('TestBackBundle:Domain');
$domains = $repository->findAll();
foreach($domains as $domain) {
$domainObject = new Domain();
$domainObject->setDomainName($domain->getDomainName());
$site->getDomains()->add($domainObject);
}
$newForm = $this->createForm(new SiteType(), $site);
return $this->render('TestBackBundle:Site:new_site.html.twig', array(
'site' => $site,
'form' => $newForm->createView(),
));
}
我想只显示一个选项列表中的所有域名...我该怎么做?
我们需要看到的控制器。我的第一个猜测是,“Site”实体已经在DB中链接了3个“Domain”对象。 – 2014-08-27 15:50:23
看起来,我编辑我的答案添加我的控制器:) – DOZ 2014-08-27 15:54:10