指南

快速上手

迈出使用 Orion 的第一步。

安装

环境要求

  • PHP >= 7.3
  • Laravel >= 5.7

Orion 可以安装到新项目或现有项目中,只需添加一个 composer 依赖即可:

composer require tailflow/laravel-orion
php artisan vendor:publish --tag=orion-config
使用 Composer v1 的用户在安装时可能会遇到以下错误:

Installation error: Installation request for doctrine/dbal (locked at 3.0.0) -> satisfiable by doctrine/dbal[3.0.0]

此时可将 Composer 升级到 v2(推荐),或在安装 Orion 之前先运行 composer require doctrine/dbal

简单 CRUD

假设你有一个表示博客文章的模型 Post,并希望通过 REST API 来管理它。

使用 Orion 只需 3 个简单步骤即可实现:

  1. 创建 PostsController 并继承 Orion\Http\Controllers\Controller
<?php

namespace App\Http\Controllers\Api;

use App\Models\Post;
use Orion\Http\Controllers\Controller;

class PostsController extends Controller
{

}
  1. 然后定义 protected $model 属性,并将其设置为模型的完全限定类名。完整的控制器如下所示
<?php

namespace App\Http\Controllers\Api;

use Orion\Http\Controllers\Controller;

class PostsController extends Controller
{
    /**
     * 模型的完全限定类名
     */
    protected $model = Post::class; // 或 "App\Models\Post"
}
默认情况下,Laravel 的 app/Http/Controllers 中并不包含 Api 文件夹,但建议创建一个并将所有 API 控制器存放在其中,以保持代码结构清晰。
请确保为通过 API 暴露的模型创建并注册了策略,或考虑使用 DisableAuthorization trait(仅限本地测试),以避免在策略未注册或配置有误时收到 403 错误。
请求类必须继承 Orion\Http\Requests\Request 类,而不是 Illuminate\Foundation\Http\FormRequest
  1. 最后,在 api.php 中调用 Orion::resource 注册路由
<?php

use Illuminate\Support\Facades\Route;
use Orion\Facades\Orion;
use App\Http\Controllers\PostsController;

Route::group(['as' => 'api.'], function() {
    Orion::resource('posts', PostsController::class);
});

完成!现在你可以通过 REST API 创建、列出、搜索、查看、更新和删除博客文章了。试试通过 (POST) https://<your app url>/api/posts 端点创建一篇文章吧。

你还可以运行 php artisan route:list 命令查看所有可用的端点

+--------+-----------+-------------------------------------------------+----------------------------------------+---------------------------------------------------------------------------+-------------------------------------------------+
| Domain | Method    | URI                                             | Name                                   | Action                                                                    | Middleware                                      |
+--------+-----------+-------------------------------------------------+----------------------------------------+---------------------------------------------------------------------------+-------------------------------------------------+
...
|        | GET|HEAD  | api/posts                                       | api.posts.index                        | App\Http\Controllers\Api\PostsController@index                            | api                                             |
|        | POST      | api/posts/search                                | api.posts.search                       | App\Http\Controllers\Api\PostsController@index                            | api                                             |
|        | POST      | api/posts                                       | api.posts.store                        | App\Http\Controllers\Api\PostsController@store                            | api                                             |
|        | GET|HEAD  | api/posts/{post}                                | api.posts.show                         | App\Http\Controllers\Api\PostsController@show                             | api                                             |  
|        | PUT|PATCH | api/posts/{post}                                | api.posts.update                       | App\Http\Controllers\Api\PostsController@update                           | api                                             |
|        | DELETE    | api/posts/{post}                                | api.posts.destroy                      | App\Http\Controllers\Api\PostsController@destroy                          | api                                             |
|        | POST      | api/posts/batch                                 | api.posts.batchStore                   | App\Http\Controllers\Api\PostsController@batchStore                       | api                                             |
|        | PATCH     | api/posts/batch                                 | api.posts.batchUpdate                  | App\Http\Controllers\Api\PostsController@batchUpdate                      | api                                             |
|        | DELETE    | api/posts/batch                                 | api.posts.batchDestroy                 | App\Http\Controllers\Api\PostsController@batchDestroy                     | api                                             |