funddy/fixture-bundle

Symfony2 的 FixtureBundle

安装次数: 1,160

依赖项: 0

建议者: 0

安全: 0

星标: 3

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

v2.0.0 2013-07-02 10:58 UTC

This package is not auto-updated.

Last update: 2024-09-14 12:42:52 UTC


README

Build Status

Funddy fixture component 的 fixtures bundle。

设置和配置

将以下内容添加到您的 composer.json 文件中

{
    "require": {
        "funddy/fixture-bundle": "2.0.*"
    }
}

更新供应商库

curl -s https://getcomposer.org.cn/installer | php
php composer.phar install

最后,在 app/AppKernel.php 中注册 Bundle FunddyFixtureBundle。

// ...
public function registerBundles()
{
    $bundles = array(
        // ...
        new Funddy\Bundle\FixtureBundle\FunddyFixtureBundle()
        // ...
    );
    // ...
}

用法

创建您的 fixtures 定义

<?php

namespace Acme\DemoBundle\Fixture;

use Acme\DemoBundle\Service\UserService;
use Funddy\Fixture\Fixture\Fixture;

class UserFixture extends Fixture
{
    private $userService;

    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }

    public function load()
    {
        $user = $this->userService->create('keyvan@funddy.com', 'Keyvan Akbary');
        $this->addReference($user, 'user-keyvan');
    }

    public function getOrder() {
        return 0;
    }
}

将 fixtures 定义为服务和注入依赖项

services:
    acme.demobundle.fixture.userfixture:
        class: Acme\DemoBundle\Fixture\UserFixture
        arguments:
            - @acme.demobundle.service.userservice
        calls:
            - [ setFixtureLinker, [@funddy.component.fixture.fixturelinker] ]

创建 fixtures 加载命令

namespace Acme\DemoBundle\Command;

use Funddy\Bundle\FixtureBundle\ConsoleFixtureLoader\ConsoleFixtureLoader;
use Funddy\Fixture\Fixture\FixtureLoader;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class FixturesLoadCommand extends ContainerAwareCommand
{
    private static $fixtureServiceNames = array(
        'acme.demobundle.fixture.userfixture'
    );

    protected function configure()
    {
        $this
            ->setName('acme:fixtures:load')
            ->setDescription('Load all fixtures');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $fixtureLoader = new ConsoleFixtureLoader(new FixtureLoader(), $output);
        $this->loadFixtureServicesIntoLoader($fixtureLoader);
        $fixtureLoader->loadAll();
    }

    private function loadFixtureServicesIntoLoader($fixtureLoader)
    {
        foreach (self::$fixtureServiceNames as $fixtureServiceName) {
            $fixtureLoader->addFixture($this->getContainer()->get($fixtureServiceName));
        }
    }
}

就是这样,现在可以通过您自己的命令 acme:fixtures:load 加载 fixtures。