2016-03-12 6 views
0

Может ли кто-нибудь предоставить мне пример о ссылке на файл yf данных из двух разделяющих пакетов, используя HautellokAliceBundle в Simfony 2,7. Мне нужно ссылаться на поле автора в моем списке статей из FOSUserBundle. Im новичок, пожалуйста, подумайте об этом. Благодарю. Информация в документах AliceBundle не имеет этой проблемы.Ссылка на светильники между связями с помощью Hautleook/AliceBundle

Ok Это мои Светильники для групп и пользователей:

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; 
    } 
} 

Как вы видите, что я хочу, ссылается на автора из User Entity в MBBundle на юридическое лицо в LegalBundle. Еще раз спасибо за вашу помощь

ответ

0

Вам необходимо загрузить свои светильники в определенном порядке. Сначала сохраните свои 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

+0

Спасибо так много для вашего ответа. У меня есть эти настройки в моих классах DataFixtures, и он работает, если объекты находятся в одном комплекте. Я пробовал использовать тот же номер getOrder, как вы сказали, но затем он загружается сначала из ArticlesBundle. Мой isuue is Если сущности находятся в разных пакетах, когда я запускаю приборы: load comand console посылает мне следующее Уведомление; Неопределенный псевдоним индекса. Это мой isuue, как загрузить ссылки из разных пакетов. Еще раз спасибо – nikimiki

+0

Пожалуйста, покажите нам свои светильники. –