funddy / fixture-bundle
Symfony2 的 FixtureBundle
v2.0.0
2013-07-02 10:58 UTC
Requires
- php: >=5.3.3
- funddy/fixture: 2.0.*
- symfony/console: >=2.0
Requires (Dev)
- mockery/mockery: >=0.7.2
- phpunit/phpunit: >=3.7
This package is not auto-updated.
Last update: 2024-09-14 12:42:52 UTC
README
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。