Symfony 2. Как сохранить сущность, переданную в форму?

Имеется сущность "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
  • Вопрос задан
  • 2851 просмотр
Пригласить эксперта
Ответы на вопрос 1
hell0w0rd
@hell0w0rd
Просто разработчик
Покажите больше кода. Где-то у вас не так.
Судя по ошибки где-то система создает ArrayCollection, который должен бы массив принимать, а ему скармливается ваша сущность
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы