指南

序言

了解 Orion for Laravel 2.0 中的变更与新特性。

发布说明

OpenAPI 规范生成

现在,你只需运行以下命令,即可为所有由 Orion 驱动的端点自动生成 OpenAPI 规范:

php artisan orion:specs

你可以在本指南的规范一节了解该特性的更多信息。

JSON 字段搜索

2.0 版本引入了对 JSON 字段的支持,带来更强大的搜索能力。

// (POST) https://myapp.com/api/posts/search
{
    "filters" : [
        {"field" : "options->visible", "operator" : ">=", "value" : true},
    ],
    "search" : {
        "value" : "Example post"
    },
    "sort" : [
        {"field" : "options->key", "direction" : "asc"},
    ]
}

要将 JSON 字段内部的字段加入白名单,请使用箭头写法:

<?php

namespace App\Http\Controllers\Api;

use Orion\Http\Controllers\Controller;

// 这里的 options 字段是 Post 模型的 json/jsonb 字段
// visible 和 key 字段是该 json/jsonb 字段内部的字段
class PostsController extends Controller
{
    public function filterableBy() : array
    {
        return ['options->visible'];
    }

    public function searchableBy() : array
    {
        return [ 'options->key'];
    }

    public function sortableBy() : array
    {
         return ['options->key'];
    }
}

嵌套关联搜索

在此之前,只能在一层深度的关联字段上进行搜索,例如:

public function searchableBy() : array
{
    return ['user.name']; // user 关联的 name 字段
}

本次发布支持在深层嵌套的关联上执行搜索:

public function searchableBy() : array
{
    return ['user.name', 'user.location.address.postalcode']; // 深层嵌套的 user.location.address 关联的 postalcode 字段
}

钩子方法签名

现在,父实体会被传入关联控制器的钩子方法,例如:

protected function afterSave(Request $request, Model $parentEntity, Model $entity)

默认认证守卫解析

默认认证守卫现在从 orion.php 配置文件的 auth.guard 键解析。

如果你需要对认证守卫或用户解析进行更细粒度的控制,仍然可以在控制器上重写 resolveUser 方法。

支持 ilikenot ilike 操作符

// (POST) https://myapp.com/api/posts/search
{
    "filters" : [
        {"field" : "title", "operator" : "ilike", "value" : "example post"},
    ]
}

升级指南

本指南介绍将 Laravel Orion 从 v1.x 升级到 v2.x 的过程。

要求 PHP 7.3

最低 PHP 版本现在为 7.3.0。

更新依赖

composer.json 文件中更新以下依赖:

  • php 更新为 >=7.3
  • tailflow/laravel-orion 更新为 ^2.0

发布配置

本次发布引入了 orion.php 配置文件,允许你自定义默认认证驱动,以及用于规范生成的 API 信息。

要发布配置,请运行以下命令:

php artisan vendor:publish --tag=orion-config

白名单方法签名

以下方法已改为 public

  • exposedScopes
  • filterableBy
  • searchableBy
  • sortableBy
  • includes
  • alwaysIncludes

如果你重写过其中任何方法,请相应地更新你的控制器。

钩子方法签名

从 2.0 版本开始,父实体会被传入钩子方法。如果你重写过任何钩子方法,请相应地更新你的关联控制器。

示例如下:

2.0 之前

protected function afterSave(Request $request, Model $entity)

2.0 之后

protected function afterSave(Request $request, Model $parentEntity, Model $entity)