我使用“InformationType”和“ContactType”创建了“ClientType”。 客户端可以有多个信息和联系人,因此我使用嵌入了客户端,信息和联系人的表单。
当我打印表格时,没关系,但是一旦我冲洗:
捕获致命错误:传递给Doctrine \ Common \ Collections \ ArrayCollection :: __ construct()的参数1必须是类型数组,给定对象,在C:\ wamp \ www \ LinkWebCRM \ vendor \ doctrine \ orm \中调用第605行的lib \ Doctrine \ ORM \ UnitOfWork.php并定义了
我尝试使用“InformationType”和“ContactType”的“CollectionType”,但后来我收到很多表单警告“此值无效。”,“此表单不应包含额外内容字段。“,和信息和联系表格的8倍......
ClientType:
class ClientType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('nom', TextType::class);
$builder->add('prenom', TextType::class);
$builder->add('informations', InformationType::class);
$builder->add('contacts', ContactType::class);
$builder->add('Enregistrer', SubmitType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'CommonBundle\Entity\Client',
));
}
}
信息:
class InformationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('nomEntreprise', TextType::class);
$builder->add('sIRET', TextType::class);
$builder->add('typeSite', TextType::class);
$builder->add('adresseEntreprise', TextType::class);
$builder->add('dateSignature', DateTimeType::class, array(
'years' => range(date("Y"), date('Y-m-d',strtotime(date("Y-m-d", time()) . " + 1825 day")))
));
$builder->add('nomDomaine', TextType::class);
$builder->add('dateMiseEnLigne', DateTimeType::class, array(
'years' => range(date("Y"), date('Y-m-d',strtotime(date("Y-m-d", time()) . " + 1825 day")))
));
$builder->add('commentaire', TextType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array('data_class' => null));
}
}
ContactType:
class ContactType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('telephone', TextType::class);
$builder->add('fax', TextType::class, array(
'required' => false));
$builder->add('email', TextType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'CommonBundle\Entity\Contact',
));
}
}
然后,
客户端:
namespace CommonBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use CommonBundle\Entity\Information;
/**
* Client
*
* @ORM\Table(name="client")
* @ORM\Entity(repositoryClass="CommonBundle\Repository\ClientRepository")
*/
class Client
{
/**
* @ORM\OneToMany(targetEntity="CommonBundle\Entity\Information", mappedBy="client")
*/
public $informations;
/**
* @ORM\OneToMany(targetEntity="CommonBundle\Entity\Contact", mappedBy="client")
*/
public $contacts;
/**
* Constructor
*/
public function __construct()
{
$this->informations = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add information
*
* @param \CommonBundle\Entity\Information $information
*
* @return Client
*/
public function addInformation(\CommonBundle\Entity\Information $information)
{
$this->informations[] = $information;
return $this;
}
/**
* Remove information
*
* @param \CommonBundle\Entity\Information $information
*/
public function removeInformation(\CommonBundle\Entity\Information $information)
{
$this->informations->removeElement($information);
}
/**
* Get informations
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getInformations()
{
return $this->informations;
}
/**
* Add contact
*
* @param \CommonBundle\Entity\Contact $contact
*
* @return Client
*/
public function addContact(\CommonBundle\Entity\Contact $contact)
{
$this->contacts[] = $contact;
return $this;
}
/**
* Remove contact
*
* @param \CommonBundle\Entity\Contact $contact
*/
public function removeContact(\CommonBundle\Entity\Contact $contact)
{
$this->contacts->removeElement($contact);
}
/**
* Get contacts
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getContacts()
{
return $this->contacts;
}
}
信息:
namespace CommonBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use CommonBundle\Entity\Client;
/**
* Information
*
* @ORM\Table(name="information")
* @ORM\Entity(repositoryClass="CommonBundle\Repository\InformationRepository")
*/
class Information
{
/**
* @ORM\ManyToOne(targetEntity="CommonBundle\Entity\Client", inversedBy="informations")
* @ORM\JoinColumn(nullable=false)
*/
public $client;
/**
* Set client
*
* @param \CommonBundle\Entity\Client $client
*
* @return Information
*/
public function setClient(\CommonBundle\Entity\Client $client)
{
$this->client = $client;
return $this;
}
/**
* Get client
*
* @return \CommonBundle\Entity\Client
*/
public function getClient()
{
return $this->client;
}
}
并联系:
namespace CommonBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Contact
*
* @ORM\Table(name="contact")
* @ORM\Entity(repositoryClass="CommonBundle\Repository\ContactRepository")
*/
class Contact
{
/**
* @ORM\ManyToOne(targetEntity="CommonBundle\Entity\Client", inversedBy="contacts")
* @ORM\JoinColumn(nullable=true)
*/
public $client;
/**
* Set client
*
* @param \CommonBundle\Entity\Client $client
*
* @return Contact
*/
public function setClient(\CommonBundle\Entity\Client$client = null)
{
$this->client = $client;
return $this;
}
/**
* Get client
*
* @return \CommonBundle\Entity\Client
*/
public function getClient()
{
return $this->client;
}
}
答案 0 :(得分:0)
因此,由于收集,我不得不创建一个信息实例。 然后我就这样给它补水:
$information->setNameVariable($client->getInformations()['nameVariable'])
请注意'信息'来自$ client-> getInformations()目前不是一个对象,而是表单的数组,这就是问题所在。
这对于表格中所有变量的预期相反。 最后我添加了var not nullable,坚持对象,重复" Contact" 的逻辑,然后刷新。
我还必须添加客户端的 __构造函数 :
$this->contacts = new \Doctrine\Common\Collections\ArrayCollection();
对于ClientType:
$builder->add('informations', InformationType::class, array(
'data_class' => null));