beelab / memory-repository-bundle
此包已被废弃,不再维护。未建议任何替代包。
用于在内存中使用的Symfony扩展包
dev-master / 0.1.x-dev
2014-01-29 14:59 UTC
Requires
- doctrine/dbal: 2.5.*@dev
- doctrine/doctrine-bundle: ~1.3@beta
- doctrine/orm: 2.5.*@dev
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is auto-updated.
Last update: 2022-02-01 12:30:45 UTC
README
此扩展包的目的是使用Doctrine进行内存中仓库的操作。主要用途是在测试期间,可以避免与数据库交互,而不需要更改任何实现。
安装
将这些行添加到您的composer.json中
"require": { "doctrine/orm": "2.5.*@dev", "doctrine/dbal": "2.5.*@dev", "doctrine/doctrine-bundle": "~1.3@beta", "beelab/memory-repository-bundle": "0.1.*@dev" }
然后运行composer update
。
使用方法
假设您正在使用一个名为Article的实体。在您的实体中,您必须在@ORM\Entity
注解中添加repositoryClass
值。例如
<?php namespace Acme\DemoBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Table() * @ORM\Entity(repositoryClass="Acme\DemoBundle\Repository\ArticleRepository") */ class Article { // ... }
因此,您需要一个ArticleRepositoryClass,它扩展了Doctrine的EntityRepository。现在,创建一个新类,如下所示
<?php namespace Acme\DemoBundle\MemoryRepository; use Acme\DemoBundle\Entity\Article; use Doctrine\Common\Persistence\ObjectRepository; use Doctrine\ORM\Mapping\ClassMetadata; class ArticleRepository implements ObjectRepository { protected $_entityName, $_em, $_class; /** * @param EntityManager $em * @param Mapping\ClassMetadata $class */ public function __construct($em, ClassMetadata $class) { $this->_entityName = $class->name; $this->_em = $em; $this->_class = $class; } /** * {@inheritDoc} */ public function find($id) { // implement as you prefer... } /** * {@inheritDoc} */ public function findAll() { // implement as you prefer... } /** * {@inheritDoc} */ public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) { // implement as you prefer... } /** * {@inheritDoc} */ public function findOneBy(array $criteria) { // this is just an example... if (isset($criteria['slug']) && $criteria['slug'] == 'an-article') { $article = new Article(); $article ->setTitle('An article') ->setText('Lorem ipsum dolor sit amet.') ; return $article; } } /** * {@inheritDoc} */ public function getClassName() { return $this->_entityName; } }
目前,您必须使用名为"Repository"和"EntityRepository"的目录(和命名空间)。这有点丑,我们希望改进。
最后,将以下内容添加到您的config_test.yml中
doctrine: orm: repository_factory: beelab.repository.factory
完成!现在,当在测试中检索Article对象时,它不是从数据库中检索,而是从您的ArticleRepository中检索,具体取决于您的逻辑。