ragboyjr / laravel-api-skeleton
Laravel 框架。
Requires
- php: ^7.1.3
- doctrine/dbal: ^2.6
- fideloper/proxy: ^4.0
- krak/doctrine-oauth2: ^0.1.1
- krak/fn: ^0.1.7
- krak/marshal: ^0.2.3
- krak/validation: ^0.3.9
- laravel-doctrine/migrations: ^1.1
- laravel-doctrine/orm: 1.4.*
- laravel/framework: 5.6.*
- predis/predis: ^1.1
- symfony/psr-http-message-bridge: ^1.0
- zendframework/zend-diactoros: ^1.7
Requires (Dev)
- filp/whoops: ^2.0
- fzaninotto/faker: ^1.4
- mockery/mockery: ^1.0
- nunomaduro/collision: ^2.0
- phpunit/phpunit: ^7.0
README
安装方式
composer create-project ragboyjr/laravel-api-skeleton {name}
安装完成后,您需要运行以下命令
mv .editor/project.sublime-project .editor/acme-svc.sublime-project
find . -type d \( -path ./vendor -o -path ./.git \) -prune -o -type f -print -exec sed -i '' -e 's/{project}/acme-svc/g' {} \;
find . -type d \( -path ./vendor -o -path ./.git \) -prune -o -type f -print -exec sed -i '' -e 's/{project_underscore}/acme_svc/g' {} \;
find . -type d \( -path ./vendor -o -path ./.git \) -prune -o -type f -print -exec sed -i '' -e 's/{project_title}/Acme Svc/g' {} \;
find . -type d \( -path ./vendor -o -path ./.git \) -prune -o -type f -print -exec sed -i '' -e 's/{project_doctrine_ns}/Acme/g' {} \;
find ./tests -type f -print -exec sed -i '' -e 's/namespace App\\/namespace Acme\\Svc\\/g' {} \;
./artisan app:name 'Acme\Svc'
make ignored-files
完成后,通过 docker-compose up
启动 docker,然后运行 ./artisan doctrine:migrations:diff
生成初始迁移。
开发环境搭建
- 复制所有示例文件:
make ignored-files
- 启动 docker 容器:
docker-compose up
- 通过
docker exec -it {project} bash
进入{project}
容器 - 运行
make setup
初始化仓库。这将初始化仓库的所有方面,您可以通过查看Makefile
来了解此脚本的执行内容。
make setup
结束后,应该生成了一个长访问令牌,您需要将其复制到 .env 文件中并设置 INTEGRATION_API_TOKEN
的值。
为了验证您已正确设置,您需要运行 make test
然后 make refresh-db test-integration
。这些将运行整个测试套件。如果任何测试失败,则表示设置存在问题,需要解决。
开发
此应用程序是用 Laravel 和 Doctrine 构建的。
迁移
在 {project}
容器内部,运行 ./artisan doctrine:migrations:migrate
加载数据库。您需要在每次有新迁移时运行此命令。您应该养成每次从 stg
拉取最新代码时运行迁移的习惯。
生成迁移
管理迁移的最好方式是首先配置元数据 yaml 文件,然后简单地运行 ./artisan doctrine:migrations:diff
。这将创建一个迁移文件,它会将您当前本地数据库与迁移映射文件之间的差异。请注意,如果您忘记运行 ./artisan doctrine:migrations:migrate
将本地数据库更新到最新版本,运行迁移差异命令可能会重新应用一些数据库更改,这将 破坏迁移。
测试
单元测试
make test
集成测试
make test-integration
在推送之前确保所有测试通过。
工作流程
使用 phpunit 和测试进行开发的最简单方法是创建针对您正在进行的任何内容的特定测试,然后使用 phpunit 单独运行它们。
例如,如果我在工作 tests/Integration/RepApiTest
testApproveRepNotFound
方法,我将在 docker 容器内运行以下命令来测试该方法:
./vendor/bin/phpunit tests/Integration/RepAPITest.php --filter=testApproveRepNotFound
沙盒
playground.php
是一个文件,允许您快速在当前应用程序中原型化/测试代码。它只是一个简单的控制台命令,但文件被忽略,因此您不必担心提交这些临时更改。
您可以通过 ./artisan playground
运行沙盒。
故障排除
以下是一些您在开发过程中可能会遇到的一些常见错误以及如何修复它们。
测试中状态码 500
在集成测试中断言状态码时,如果您得到状态码 500,最简单的开始调试的方式是检查 storage/logs/laravel.log 并找到发生的异常。
异常:在 Doctrine\ORM\Mapping\ClassMetadataInfo 类中解析不可解的依赖 [参数 #0 [ $entityName ]]
当您为实体创建一个仓库类,并为特定的仓库类指定类型提示,但未在服务提供者中注册该仓库类时,可能会发生这种情况。为了解决这个问题,您需要像这样在模块的服务提供者中注册仓库。
addEntityRepo($this->app, Rep::class);
addEntityRepo
预期的是 Laravel 应用实例和 实体 类名,而不是仓库类。
您可以在 app/Model
文件夹中查看不同模块中在服务提供者中注册仓库的示例。