Имеется сущность "User" – представляет пользователя в системе. Имеется сущность "Role" – эта сущность представляет роль пользователя в систему. Между собой они связаны "ManyToMany".
# Часть кода из файла .../Entity/User.php которая относится к Role сущности
/**
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
*/
private $roles;
public function __construct() {
$this->roles = new ArrayCollection();
}
public function getRoles() {
return $this->roles->toArray();
}
# Часть кода из файла .../Entity/Role.php которая относится к User сущности
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
*/
private $users;
public function __construct() {
$this->users = new ArrayCollection();
}
/**
* @return \Doctrine\Common\Collections\Collection
*/
public function getUsers() {
return $this->roles->toArray();
}
Обе сущности отлично выполняют свои обязанности. Теперь строим форму редактирования пользователя:
# Часть кода из файла .../Form/Type/UserType.php
$builder
->add('username', 'text')
->add('email', 'email')
->add('roles', 'entity', ['class' => 'AcmeUserBundle:Role', 'property' => 'name'])
->add('save', 'submit');
# Часть кода из файла .../Controller/UserController.php
if ($form->isValid()) {
$em->persist($user);
$em->flush();
}
Получаем форму. В форме имеется выподающий список (select tag) "Роль пользователя", где можно выбрать какую-либо роль, нажимаем сохранить и... вылетает ошибка:
ContextErrorException: Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be of the type array, object given, called in /Users/Gee/Sites/sirius.pro/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php on line 547 and defined in /Users/Gee/Sites/sirius.pro/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php line 47