指南
快速上手
迈出使用 Orion 的第一步。
安装
环境要求
- PHP >= 7.3
- Laravel >= 5.7
Orion 可以安装到新项目或现有项目中,只需添加一个 composer 依赖即可:
composer require tailflow/laravel-orion
php artisan vendor:publish --tag=orion-config
使用 Composer v1 的用户在安装时可能会遇到以下错误:
此时可将 Composer 升级到 v2(推荐),或在安装 Orion 之前先运行
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 个简单步骤即可实现:
- 创建
PostsController并继承Orion\Http\Controllers\Controller
<?php
namespace App\Http\Controllers\Api;
use App\Models\Post;
use Orion\Http\Controllers\Controller;
class PostsController extends Controller
{
}
- 然后定义
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 错误。- 最后,在
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 |