c4tech / support
API后端的基础类和特性。
Requires
- php: >=5.4.0
- codeception/verify: ^0.2.0
- illuminate/database: ^5.0.0
- illuminate/routing: ^5.0.0
- illuminate/support: ^5.0.0
- mockery/mockery: ^0.9.0
- nesbot/carbon: ^1.0.0
- phpunit/phpunit: ^4.0.0
This package is not auto-updated.
Last update: 2024-09-14 18:09:37 UTC
README
一个包含许多特性和基础类的包,可加速开发。由C4 Tech和Design用心制作。
基础类
我们在应用中使用的基本功能。通常,我们使用Repository模式来保持数据库的特定细节抽象化,以及尽可能多地缓存数据。我们通常使用与Repository的单例实例连接的Facade来代替在控制器构造函数上使用依赖注入,这样我们就可以对Repository执行类似于对默认静态模型调用(例如 User::find($id)
)的静态调用。然而,DI方法应该通过在应用程序中进行一些设置(主要是在服务提供程序中创建合约和绑定解析)来工作。
请求
我们将Laravel用作JavaScript前端的后端API。经过关于属性命名 camelCase vs snake_case 的许多内部讨论后,我们决定两者都使用!这,加上我们的基础 Model
,允许自动将defacto JavaScript/JSON camelCase注记转换为defacto Laravel Model snake_case注记。换句话说,在JSON中使用camelCase,在PHP中使用snake_case。
如果您想扩展 Illuminate\Foundation\Http\FormRequest
(这是一个好主意!),请将 C4tech\Support\Request
类复制到您的应用中,并将扩展的 BaseRequest
改为 FormRequest
,同时更改文件的命名空间。
控制器
我们的控制器提供了一般的响应处理和模式。您不需要在控制器方法中直接调用 Response::json()
,而是使用 respond()
方法,该方法接受一个HTTP状态码(默认 = 200)和可选的附加头数组。数据来自控制器 ->data
属性。尽可能将响应转换为JSON,并以规范化的输出返回。
示例
try {
$this->data['users'] = User::all();
$this->data['success'] = true;
catch (SomeException $error) {
$this->errors[] = $error->getMessage();
}
return $this->respond();
在成功时应该返回类似以下内容
{
"success": true,
"errors": [],
"data": {
"users": [
{...},
{...},
...
]
}
}
在失败时应该返回类似以下内容
{
"success": false,
"errors": [
"An error message"
],
"data": {}
}
仓库
我们的仓库为底层模型提供了一个可缓存的接口。获取器和设置器方法允许自动修改属性,包括模型关系。任何未被魔法获取器/设置器方法捕获的内容都会推回到模型中,因此模型属性可以直接在仓库实例上访问。此外,boot()
方法将模型事件监听器添加到数据库更改时刷新相关缓存。
指向底层模型(静态 $model
)的属性预期是一个配置项的引用,但可以是硬编码的类名。
模型
我们的模型提供了DateFilter和JsonableApiModel特性,并将deleted_at
属性注入到guarded
属性和getDates()
中。
特性
我们喜欢保持事物尽可能简单。我们有一些特性来提供一些有用的功能。
DateFilter
提供日期属性的查询范围构建器,以便您可以编写,例如,$user->created_before($date)
。
JsonableApiModel
提供将可数组的/jsonable属性自动转换为camelCase的功能。使用 c4tech.jsonify_output
配置变量。
JsonableApiRequest
一个简单的特性,用于将接收到的属性自动转换为snake_case的请求类。使用 c4tech.snakify_json_input
配置变量。
JsonableColumn
提供方法在属性修改器和访问器中调用,以处理将数据转换为/从数据库中的JSON。
基础测试
我们喜欢测试。对包进行单元测试,对应用程序进行集成和验收测试。为了使编写测试更少复制粘贴,我们为测试开发了几个特性和类。我们还像《盗梦空间》一样测试了我们的测试。
基础
我们用于测试的基本测试类。它消费下面的Reflectable特性,并提供一个tearDown()方法来调用Mockery::close()
。
外观
通过提供一个确保返回正确的外观访问器的方法,简化了对外观测试的测试。
模型
模型可以做很多事情,因此我们使其易于测试模型。此测试类消费下面的Modelable、Presentable、Relatable和Scopeable特性。
仓库
一个简单的基类测试类,其中包含一个在setUp()
期间被调用的方法,以确保可以访问存储库的模拟实例及其底层模型。消费下面的Modelable特性。
测试特性
我们喜欢我们的测试简单直接,因此我们将大部分测试逻辑打包到特性中。
Modelable
一个简单的特性和存储库特性,确保每个测试方法都得到一个模型的新模拟实例。
Reflectable
一组很好的方法来包装PHP Reflection类。目前可以获取或设置属性值,获取方法或属性。自动使属性或方法可访问,以供进一步使用。
Relatable
一组详尽的测试来验证模型关系方法。
Scopeable
一个用于测试模型查询作用域语句的特性。目前仅处理简单的where()
语句的作用域。
安装和设置
- 将
"c4tech/support": "2.x"
添加到您的composer需求中,并运行composer update
。 - 将
C4tech\Support\ServiceProvider
添加到config/app.php
中的'providers'数组。 php artisan vendor:publish
- 如果您想禁用自动的camelCase<->snake_case转换,请调整
config/c4tech.php
。