ガイド
はじめに
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トレイトの使用(ローカルでのテスト専用)を検討してください。ポリシーが未登録または不正な場合に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 |