Может ли кто-нибудь предоставить мне пример ссылки на файл данных datafixture между двумя отдельными пакетами, используя HautellokAliceBundle в Simfony 2,7. Мне нужно сослаться на поле автора в моем комплекте статей от FOSUserBundle. Я новичок, пожалуйста, подумайте об этом. Благодарю. Информация в документах AliceBundle не содержит этой проблемы.
Хорошо, это мои приспособления для группы и пользователя:
MB\MBBundle\Entity\Group:
Group1:
__construct: ['Admins']
__construct: ["ROLE_ADMIN"]
Group{2..7}:
__construct(unique): [<randomGroup()>]
__construct: [<randomRole()>]
MB\MBBundle\Entity\User:
User1:
username: admin
email: [email protected]
enabled: 1
plainPassword: admin
roles: [ROLE_ADMIN]
groups: ['@Group1']
User{2..25}:
username: <firstName()>
email: <companyEmail()>
enabled: <boolean(35)>
plainPassword: <lexify()>
roles: [<randomRole()>]
groups: ['@Group*']
и это мой класс загрузчика DataFixtures для пользователя и группы
<?php
namespace MB\MBBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Hautelook\AliceBundle\Alice\DataFixtureLoader;
use Nelmio\Alice\Fixtures;
class MBBundleFixtures extends DataFixtureLoader implements OrderedFixtureInterface
{
protected function getFixtures()
{
return array (
__DIR__.'/User.yml',
);
}
public function rolesFixturesNames ()
{
return ['ROLE_ADMIN', 'ROLE_USER', 'ROLE_DIRECTORS', 'ROLE_TECHNICIANS', 'ROLE_OPERATORS', 'ROLE_ASISTANTS', 'ROLE_AUDITORS', 'ROLE_EXTERNALS'];
}
public function randomRole()
{
$names = ['ROLE_ADMIN', 'ROLE_USER', 'ROLE_PROFILE_ONE', 'ROLE_PROFILE_TWO'];
return $names[array_rand($names)];
}
public function randomGroup()
{
$names = ['Users', 'Technicians', 'Operators', 'Asistants', 'Auditors', 'Externals'];
return $names[array_rand($names)];
}
public function getOrder()
{
return 1;
}
}
И для сущности, на которую нужно ссылаться, данные фиксации к настоящему времени похожи на:
MB\LegalBundle\Entity\LegalTitles:
legalTitles{1..3}:
category: <categoryTitlesNames()>
name: <text($maxNbChars = 5)> <numberBetween($min = 100, $max = 999)>
validFrom: <dateTimeBetween('-3 years', 'now')>
validUntil: <dateTimeBetween($validFrom, '30 years')>
validFor: <numberBetween($min = 10, $max = 30)>
geopointType: <geopointTypesNames()>
latitude: <latitude($min = -5, $max = 15)>
longitude: <longitude($min = 67, $max = 80)>
elevation: <numberBetween($min = 50, $max = 4800)>
dateCreated: null
dateModified: null
author:
Класс загрузчика выглядит так:
<?php
namespace MB\LegalBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Hautelook\AliceBundle\Alice\DataFixtureLoader;
use Nelmio\Alice\Fixtures;
class LegalBundleFixtures extends DataFixtureLoader implements OrderedFixtureInterface
{
protected function getFixtures()
{
return array (
__DIR__.'/LegalTitlesFixtures.yml',
);
}
public function categoryTitlesNames ()
{
$categoryMiningTitles = array (
'CCON',
'LEXP',
'RPP',
'CVA',
);
return $categoryTitles [array_rand($categoryTitles)];
}
public function geopointTypesNames ()
{
$geopointTypes = array (
'UnderGround Access',
'Surface Access',
);
return $geopointTypes [array_rand($geopointTypes)];
}
public function getOrder()
{
return 2;
}
}
Как вы видите, я хочу отослать автора из Entity User в MBBundle к юридическому лицу в LegalBundle. В очередной раз благодарим за помощь
Вы должны загрузить свои приборы в определенном порядке. Первое — держи users
а также articles
Светильники в отдельных классах / файлах. Затем в ваших классах DataFixtures (где вы загружаете yml
файлы) вам нужно будет реализовать OrderedFixtureInterface
учебный класс (Doctrine\Common\DataFixtures\OrderedFixtureInterface
) — только один метод — getOrder
,
use Hautelook\AliceBundle\Alice\DataFixtureLoader;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
class LoadUserData extends DataFixtureLoader implements OrderedFixtureInterface
{
/**
* {@inheritDoc}
*/
protected function getFixtures()
{
return array(
__DIR__ . '/users.yml',
);
}
/**
* Get the order of this fixture
*
* @return integer
*/
public function getOrder()
{
return 10;
}
}
Это же для статей:
use Hautelook\AliceBundle\Alice\DataFixtureLoader;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
class LoadArticlesData extends DataFixtureLoader implements OrderedFixtureInterface
{
/**
* {@inheritDoc}
*/
protected function getFixtures()
{
return array(
__DIR__ . '/articles.yml',
);
}
/**
* Get the order of this fixture
*
* @return integer
*/
public function getOrder()
{
return 10;
}
}
В yml
закрепить ссылку на пользователя следующим образом:
article1:
title: "Article titles"owner: @user1
Больше документации по этой теме: http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html#sharing-objects-between-fixtures
Других решений пока нет …