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
- 3811 reads