symfony Как загружать уже существующие данные -- запрос к базе при загрузке фикстур -- Создание групп пользователей FOSUserBund
Primary tabs
Если не использовать флаг --append, то можно получить ошибку вида, при загрузке связанной сущности -- даже если SQL отработает, класс не загрузится:
[Symfony\Component\Debug\Exception\FatalThrowableError]
Type error: Argument 1 passed to ...\Entity\User::addGroup() must be an instance of ...., null given, called in
Поэтому надо выполнять команду в формате:
bin/console doctrine:fixtures:load [класс] --append
Пример загрузчика фикстуры:
<?php // src/Oeo/OeoBundle/DataFixtures/ORM/LoadUserData.php namespace AppBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\Persistence\ObjectManager; use Oeo\OeoBundle\Entity\User; use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Oeo\OeoBundle\Entity\Group; class LoadUserData implements FixtureInterface, ContainerAwareInterface { /** * @var ContainerInterface */ private $container; public function setContainer(ContainerInterface $container = null) { $this->container = $container; } public function load(ObjectManager $manager) { $userAdmin = new User(); $userAdmin->setUsername('admin'); $userAdmin->setEmail('victor.konev@mail.ru'); $group = $manager->getRepository('OeoOeoBundle:Group')->findOneByName('GROUP_ADMIN_FED'); // $group = new Group("GROUP_ADMIN_FED"); // $group1 = $group->getRepository('OeoOeoBundle:Group')->findOneByName("GROUP_ADMIN_FED"); // $group = $this->get('fos_user.group_manager')->findGroupByName('GROUP_ADMIN_FED'); // file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/var/www/sym_project/log/log123.txt', "\n\n--[fvlog2]------Start0----\n\n", FILE_APPEND); // $log2 = ''; // $log2 .= 'log: ' . print_r( $group, true ) . "\n\n"; // file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/var/www/sym_project/log/log123.txt', $log2, FILE_APPEND); $userAdmin->addGroup($group); $plainPassword = 'admin'; $encoder = $this->container->get('security.password_encoder'); $encoded = $encoder->encodePassword($userAdmin, $plainPassword); $userAdmin->setPassword($encoded); $manager->persist($userAdmin); $userRyan = new User(); $userRyan->setUsername('ryan'); $userRyan->setEmail('ryan@gmail.com'); // $group = $manager->getRepository('OeoOeoBundle:Group')->findOneByName('GROUP_ADMIN_MREG'); // $group = $manager->getRepository('OeoOeoBundle:Group')->findAll(); // $group = $manager->getRepository('OeoOeoBundle:Group')->find(2); $userRyan->addGroup($group); $plainPassword = 'ryanpass'; $encoded = $encoder->encodePassword($userRyan, $plainPassword); $userRyan->setPassword($encoded); $manager->persist($userRyan); $manager->flush(); } }
- Log in to post comments
- 3217 reads