가이드
시작하기
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로 노출하는 모델에 대해 정책을 생성하고 등록했는지 확인하세요. 정책이 등록되지 않았거나 잘못된 경우 403 오류가 발생하지 않도록
DisableAuthorization 트레이트를 사용하는 방법도 고려할 수 있습니다(로컬 테스트 전용).- 마지막으로
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 |