В моем проекте добавлены инструменты для передачи данных, которые основаны на привязке объектов объекта друг от друга.
В data fixture one я добавил ссылки на сущности, такие как:
// GroupEntity_Fixtures.php file $this->addReference('GROUP_USER', $groupUser); $this->addReference('GROUP_ADMIN', $groupAdmin);
Где $ groupAdmin и $ groupUser являются объектами Group (). В моем втором файле настроек я хочу добавить эти объекты в свой объект User через:
//UserEntity_Fixtures.php file $userActive->addGroup($this->getReference('GROUP_USER'));
$ userActive – это пользовательский объект с отношением Many to Many к Group Entity. К сожалению, кажется, что я прохожу только в прокси-объекте объекта, а не в самом сущности, который делает следующую ошибку:
[Symfony\Component\Debug\Exception\ContextErrorException] Catchable Fatal Error: Argument 1 passed to Blogger\BlogBundle\Entity\User: :addGroup() must be an instance of Blogger\BlogBundle\Entity\groups, instan ce of Proxies\__CG__\Blogger\BlogBundle\Entity\Group given, called in /home /na/Practice/src/Blogger/BlogBundle/DataFixtures/ORM/CreateUserController_S ignUpForm_UserEntity_Fixtures.php on line 27 and defined in /home/na/Practi ce/src/Blogger/BlogBundle/Entity/User.php line 305
Как преобразовать ссылку из прокси в объект, который он ожидает?
Код для группы:
<?php // DataFixtures/ORM/GroupEntity_Fixtrues.php namespace Blogger\BlogBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\OrderedFixtureInterface; use Doctrine\Common\DataFixtures\AbstractFixture; use Doctrine\Common\Persistence\ObjectManager; use Blogger\BlogBundle\Entity\User; use Blogger\BlogBundle\Entity\Group; class GroupEntity_Fixtures extends AbstractFixture implements OrderedFixtureInterface { /** * {@inheritDoc} */ public function load(ObjectManager $manager) { $groupUser = new Group(); $groupUser->setName('GROUP_USER'); $groupUser->setRole('ROLE_USER'); $manager->persist($groupUser); $groupAdmin = new Group(); $groupAdmin->setName('GROUP_ADMIN'); $groupAdmin->setRole('ROLE_USER,ROLE_ADMIN'); $manager->persist($groupAdmin); $manager->flush(); $this->addReference('GROUP_USER', $groupUser); $this->addReference('GROUP_ADMIN', $groupAdmin); } public function getOrder() { return 1; } }
Код для пользователя
<?php // DataFixtures/ORM/CreateUserController_SignUpForm_UserEntity_Fixtrues.php namespace Blogger\BlogBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\OrderedFixtureInterface; use Doctrine\Common\DataFixtures\AbstractFixture; use Doctrine\Common\Persistence\ObjectManager; use Blogger\BlogBundle\Entity\User; use Blogger\BlogBundle\Entity\Group; class CreateUserController_SignUpForm_UserEntity_Fixtures extends AbstractFixture implements OrderedFixtureInterface { /** * {@inheritDoc} */ public function load(ObjectManager $manager) { $groupUser2 = new Group(); $groupUser2->setName('GROUP_USER'); $groupUser2->setRole('ROLE_USER'); $manager->persist($groupUser2); // This person represents an active (email verified) user. $userActive = new User(); $userActive->setPassword("passwordActive"); $userActive->setEmail("testActive@test.com"); $userActive->setUserName("testActive"); $userActive->setPassword(crypt($userActive->getPassword(),$userActive->getSalt())); $userActive->setEmailToken(md5(uniqid(rand(), true))); $userActive->addGroup($groupUser2); //$userActive->getGroups()->add($groupRepository->getGroupByName("BASIC_USER")); // This person represents an unactive (email not verified) user. $userUnactive = new User(); $userUnactive->setPassword("passwordUnactive"); $userUnactive->setEmail("testUnactive@test.com"); $userUnactive->setUserName("testUnactive"); $userUnactive->setPassword(crypt($userUnactive->getPassword(),$userUnactive->getSalt())); $userUnactive->setEmailToken(md5(uniqid(rand(), true))); // Persist objects into the database $manager->persist($userActive); $manager->persist($userUnactive); $manager->flush(); } public function getOrder() { return 2; } }
Код для группы:
/** * @ORM\ManyToMany(targetEntity="User", inversedBy="groups") */ private $users;
Код для пользователя:
/** * @ORM\ManyToMany(targetEntity="Group", mappedBy="users") */ protected $groups;
Добавлена группа Methos:
/** * Add groups * * @param \Blogger\BlogBundle\Entity\groups $groups * @return User */ public function addGroup(\Blogger\BlogBundle\Entity\groups $groups) { $this->groups[] = $groups; return $this; }
Метод addGroup имеет неправильный тип подсказки:
должен быть:
/** * Add groups * * @param \Blogger\BlogBundle\Entity\Group $groups * @return User */ public function addGroup(\Blogger\BlogBundle\Entity\Group $groups) { $this->groups[] = $groups; return $this; }
обратите внимание на «\ Blogger \ BlogBundle \ Entity \ Group» вместо «\ Blogger \ BlogBundle \ Entity \ groups»