Brianium / Driven
PHP 领域驱动项目轻松创建
Requires
- php: >=5.3.0
- phpunit/phpunit: >=3.7.8
- symfony/console: >=2.0.0
- webignition/json-pretty-print: dev-master
This package is auto-updated.
Last update: 2024-08-23 01:43:31 UTC
README
Driven 是一个命令行工具,用于生成一个为 TDD 和 DDD(领域驱动设计)准备好的 PHP 项目骨架。
目录结构
Driven 会创建一个目录结构,它很好地支持分层架构。
├── bin | └── doctrine ├── functional | └── Driven ├── it | └── Driven | ├── Infrastructure | | └── Persistence | | └── Doctrine | | ├── Repositories | | ├── DoctrineTest.php | | └── classes.txt | ├── datasets | └── DbTest.php ├── src | └── Driven | ├── Domain | | ├── Model | | | ├── Repository.php | | | └── Entity.php | | └── Service | └── Infrastructure | └── Persistence | └── Doctrine | ├── Repositories | | └── RepositoryBase.php | ├── mappings | ├── proxies | ├── ConfigurationFactory.php | ├── EntityManagerFactory.php | ├── UnitOfWork.php | └── doctrine.cfg.json ├── test | ├── Driven | | ├── Domain | | | ├── Model | | | └── Service | | └── TestBase.php | ├── fixtures | └── bootstrap.php ├── composer.json └── phpunit.xml.dist
其中 Driven
将被您提供的命名空间/供应商目录替换。
composer.json
Driven 包含一个 composer.json 文件,其中包含了以下依赖项:phpunit、phpunit/dbunit 和 doctrine/orm。composer.json 文件还包括了所有源代码和测试目录的自动加载配置。
测试类
TestBase.php
一个单元测试的基本测试用例。它包含从 fixtures
目录加载固定数据的辅助程序,并具有获取和设置私有/受保护属性的函数。
DbTest.php
一个扩展 PHPUnit 的 Database_TestCase 扩展的基本测试用例。包含 TestBase.php 中的所有行为。
它利用 PDO,并且可以通过覆盖默认 dsn 来按测试配置 dsn。
protected $dsn = "pgsql:host=%s;dbname=%s;user=%s;password=%s";
此外,您还可以通过在测试中覆盖 schema 属性来覆盖默认的模式名称。
protected $schema = ":dbtest:";
默认情况下,Driven 假设 PostgreSQL。这个数据库支持用于删除行的 TRUNCATES
操作。DbTest 就利用了这一点。如果您使用不支持此操作的数据库,则覆盖 $truncates
属性。
protected $truncates = false;
此外,还有一个辅助程序可以调用,使用 PHPUnit 提供的 getDataSet
方法将数据集从 xml 加载到数据库中。它将在集成测试套件中的 it
目录中查找这些数据集。
public function getDataSet() { return $this->dataset('dummy-data.xml'); }
有关使用 PHPUnit 数据库扩展的更多信息,请参阅 此处。
DoctrineTest.php
这个基本测试用例扩展了 DbTest,并利用了一些 Doctrine2 工具使测试更容易。它使用 UnitOfWork 测试一个 Web 应用程序中的典型工作流程。它将根据提供的类列表创建一个测试模式。实体类通过 $classes 属性提供。
protected $classes = array('Driven\\Domain\\Model\\Entity\\Entity');
如果您希望将此类列表管理在一个单独的文件中,则存在 classes.txt 文件。它遵循每行一个类的格式,每行以逗号结尾。
Class1, Class2, Class3
如果相应的映射文件存在于 mappings
目录中,则在每个测试之前将销毁并创建给定实体的模式。
配置从 doctrine.cfg.json 中读取,因此请确保在运行 PHPUnit 之前设置正确的环境变量。
ENV=development vendor/bin/phpunit it
所有测试套件和加载 composer 自动加载器的引导文件都在 phpunit.xml.dist 文件中引用。
持久化类
所有与持久化相关的类都保存在 Doctrine
目录中。这些组件已过测试,并作为位于 此处 的项目的部分使用。
mappings
此目录存储与 doctrine 一起使用的 xml 映射。它包含一个示例文件来演示约定。
proxies
这是 doctrine 将查找代理类的地方。这些应该使用 doctrine 控制台生成。
ConfigurationFactory.php
此类用于根据 ENV 环境变量(开发或生产)生成 doctrine 的配置。
EntityManagerFactory.php
用于创建或获取单例EntityManager。封装了Unit Of Work和Repository的核心功能。
RepositoryBase.php
为所有实体仓库提供便捷的基类。包含获取所有实体、根据ID获取单个实体、根据条件获取多个实体、持久化实体和删除实体的方法。唯一的要求是子类需要指定要持久化的实体类型。
class MyEntityRepository extends RepositoryBase { protected $type = 'Driven\\Domain\\Model\\MyEntity\\MyEntity'; }
UnitOfWork.php
事务发生的工作单元。包含标准的开始、提交和回滚方法。
doctrine.cfg.json
一个JSON文件,用于配置开发和生产环境的凭证。
封装的doctrine控制台
一个功能齐全的doctrine控制台被封装在bin
目录中。根据您的操作系统,可能需要进行一些调整以使其可执行。Nix用户只需执行以下命令:chmod +x doctrine
。
用法
Driven将在当前工作目录内创建一个项目结构。唯一可用的选项是指定composer二进制文件。默认情况下,假定composer已全局安装为composer
。
如果您有composer.phar,您可以使用以下方式与Driven一起使用
driven -c "php composer.phar" MyProject
安装
###Composer### Driven可以通过composer安装。只需将以下内容添加到您的composer.json文件中
"require": { "brianium/driven": "dev-master" }
然后运行php composer.phar install
您也可以直接从GitHub克隆仓库。
安装后,设置一个符号链接可能会有所帮助,这样您就可以全局访问Driven。
sudo ln -s /path/to/driven/bin/driven /usr/bin/driven
###构建phar### 可以通过在项目根目录中运行php package.php
来创建phar。这将创建build/driven.phar
。
如果您收到一个看起来像以下错误的错误
creating archive "build/driven.phar" disabled by INI setting
可以通过在您的php.ini中设置以下内容来解决此问题
; https://php.ac.cn/phar.readonly
phar.readonly = Off