首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带顺序的Symfony2装置-更好的方式

带顺序的Symfony2装置-更好的方式
EN

Stack Overflow用户
提问于 2015-10-20 18:51:22
回答 2查看 3.6K关注 0票数 2

在DoctrineFixturesBundle中,如果我想按指定的顺序执行fixture,我必须在任何fixture类方法中创建,如下所示:

代码语言:javascript
复制
public function getOrder()
{
    return 2;
}

指定顺序不是一种令人舒服的方式。

在Laravel框架中,我可以这样做:

代码语言:javascript
复制
class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call('PositionsSeeder');
        $this->call('UsersSeeder');
        $this->call('PostsSeeder');
    }
}

我的问题是:我可以在symfony中这样做吗?

我看到了一种解决方案。我可以用下面的代码做BaseFixture:

代码语言:javascript
复制
class LoadBrandData extends AbstractFixture
{
    public function load(ObjectManager $manager)
    {
        (new LoadPositionsData())->load(manager);
        (new LoadUsersData())->load(manager);
        (new LoadPostsData())->load(manager);

    }
}

但也许我能做得更好。我能?

EN

回答 2

Stack Overflow用户

发布于 2016-11-25 07:48:12

这就是我要做的。

创建一个将存储加载顺序的类。

代码语言:javascript
复制
<?php

namespace AppBundle\DataFixtures;

use AppBundle\DataFixtures\ORM\LoadClientData;
use AppBundle\DataFixtures\ORM\LoadRoleData;
use AppBundle\DataFixtures\ORM\LoadUserData;

class Order
{
    const FIXTURES = [
        LoadRoleData::class,
        LoadUserData::class,
        LoadClientData::class,
    ];
}

然后,在您的抽象fixture类(将由所有其他fixture继承的类)中,创建以下方法:

代码语言:javascript
复制
    /**
     * @return int
     * @throws \Exception
     */
    public function getOrder()
    {
        $order = array_search(get_called_class(), Order::FIXTURES);

        if ($order === false) {
            throw new \Exception('Seems like you forgot to put things in Order');
        }

        return $order;
    }

您不应该直接从fixture本身调用getOrder方法。

票数 3
EN

Stack Overflow用户

发布于 2019-08-03 05:41:00

您还可以使用前缀命名fixtures文件

代码语言:javascript
复制
00-MyFirstFixtures.php
01-MySecondFixtures.php
02-MyThirdFixtures.php

...etc

显然,不要忘记以相同的方式命名您的类

代码语言:javascript
复制
class 00-MyFirstFixtures extends Fixture
{
  ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33234690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档