ticketpark / doctrine-fixtures-autoloader
简化加载Doctrine fixtures
1.0
2015-12-07 12:05 UTC
Requires
- php: >=5.3.3
- doctrine/data-fixtures: ^1.1
Requires (Dev)
- phpunit/phpunit: ^4.0|^5.0
This package is not auto-updated.
Last update: 2024-09-24 19:39:36 UTC
README
这个库简化了加载Doctrine fixtures的过程。
安装
将TicketparkDoctrineFixturesAutoloader添加到你的composer.json文件中
{ "require": { "ticketpark/doctrine-fixtures-autoloader" } }
用法
<?php namespace Acme\Bundle\SomeBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\Persistence\ObjectManager; use Ticketpark\Doctrine\DataFixtures\Autoloader\Autoloader; class LoadCountryData extends AutoLoader implements FixtureInterface { public function load(ObjectManager $manager) { $data = array( array( '_reference' => 'CH', 'shortCode' => 'CH', 'name' => 'Switzerland' ), array( '_reference' => 'AT', 'shortCode' => 'AT', 'name' => 'Austria' ), ); $this->autoload($data, $manager); } }
在第二个fixture类中,将根据实体名称和可选的_reference
值提供引用
<?php namespace Acme\Bundle\SomeBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Common\Persistence\ObjectManager; use Ticketpark\Doctrine\DataFixtures\Autoloader\Autoloader; class LoadUserData extends AutoLoader implements FixtureInterface, DependentFixtureInterface { public function getDependencies() { return array( 'Acme\Bundle\SomeBundle\DataFixtures\ORM\LoadCountryData' ); } public function load(ObjectManager $manager) { $data = array( array( // The string `country_CH` references the element // created in the 'Country' entity with 'CH' as its // _reference value. 'country' => $this->getReference('country_CH'), 'name' => 'Tom Swissman' ) ); $this->autoload($data, $manager); } }
覆盖setter方法名称
在某些情况下,你可能想覆盖setter方法。例如,如果你的方法是addCurrency
而不是默认的addCurrencie
,那么你可以使用额外的setterMethods
参数
<?php namespace Acme\Bundle\SomeBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\Persistence\ObjectManager; use Ticketpark\Doctrine\DataFixtures\Autoloader\Autoloader; class LoadCurrencyData extends AutoLoader implements FixtureInterface { public function load(ObjectManager $manager) { $data = array( array( 'currencies' => array( 'USD', 'EUR', 'CHF' ) ), ); $setterMethods = array( 'currencies' => 'addCurrency' ); $this->autoload($data, $manager, $setterMethods); } }
将数组视为单个元素
另一个将数组视为单个元素并注入整个数组的setter的方法是使用$treatAsSingle
方法参数。
<?php namespace Acme\Bundle\SomeBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\Persistence\ObjectManager; use Ticketpark\Doctrine\DataFixtures\Autoloader\Autoloader; class LoadCurrencyData extends AutoLoader implements FixtureInterface { public function load(ObjectManager $manager) { $data = array( array( 'currencies' => array( 'USD', 'EUR', 'CHF' ) ), ); // this will cause a call to setCurrencies() with the full currencies array $treatAsSingles = array('currencies'); $this->autoload($data, $manager, array(), $treatAsSingles); } }
提供类名
默认情况下,该库会尝试根据标准数据fixture命名约定猜测你的实体命名空间。然而,你也可以手动定义你的实体命名空间
<?php namespace Acme\Bundle\SomeBundle\DataFixtures\ORM; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Common\Persistence\ObjectManager; use Ticketpark\Doctrine\DataFixtures\Autoloader\Autoloader; class LoadCountryData extends AutoLoader implements FixtureInterface { public function load(ObjectManager $manager) { $data = array( array( 'shortCode' => 'CH', 'name' => 'Switzerland' ), ); $this->setEntityClass('My\Custom\Namespace\Country'); $this->autoload($data, $manager); } }
许可证
这个bundle受MIT许可证的保护。请参阅bundle中的完整许可证。
Resources/meta/LICENSE