c4tech/support

API后端的基础类和特性。

3.1.0 2015-09-29 18:56 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:09:37 UTC


README

一个包含许多特性和基础类的包,可加速开发。由C4 Tech和Design用心制作。

Latest Stable Version Build Status Scrutinizer Code Quality Code Coverage

基础类

我们在应用中使用的基本功能。通常,我们使用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()语句的作用域。

安装和设置

  1. "c4tech/support": "2.x"添加到您的composer需求中,并运行composer update
  2. C4tech\Support\ServiceProvider添加到config/app.php中的'providers'数组。
  3. php artisan vendor:publish
  4. 如果您想禁用自动的camelCase<->snake_case转换,请调整config/c4tech.php