[laravel] 라 라벨-Route :: resource vs Route :: controller

나는 Laravel 웹 사이트, 스택 오버플로에 문서를 읽고, 구글하지만 여전히 차이 이해가 안 Route::resourceRoute::controller.

답변 중 하나는 Route :: resource가 crud를위한 것이라고 말했습니다. 그러나 Route :: controller를 사용하면 Route :: resource와 동일한 작업을 수행 할 수 있으며 필요한 작업 만 지정할 수 있습니다.

그들은 형제처럼 보입니다.

Route::controller('post','PostController');
Route::resource('post','PostController');

사용할 것을 어떻게 선택할 수 있습니까? 좋은 습관은 무엇입니까?



답변

RESTful 리소스 컨트롤러

편안하고 자원 컨트롤러 하면, 심지어 이름 그들에 대한 몇 가지 기본 경로 설정합니다.

Route::resource('users', 'UsersController');

다음과 같은 명명 된 경로를 제공합니다.

Verb          Path                        Action  Route Name
GET           /users                      index   users.index
GET           /users/create               create  users.create
POST          /users                      store   users.store
GET           /users/{user}               show    users.show
GET           /users/{user}/edit          edit    users.edit
PUT|PATCH     /users/{user}               update  users.update
DELETE        /users/{user}               destroy users.destroy

그리고 당신은 이런 식으로 컨트롤러를 설정할 것입니다 (actions = methods)

class UsersController extends BaseController {

    public function index() {}

    public function show($id) {}

    public function store() {}

}

다음과 같이 포함하거나 제외 할 작업을 선택할 수도 있습니다.

Route::resource('users', 'UsersController', [
    'only' => ['index', 'show']
]);

Route::resource('monkeys', 'MonkeysController', [
    'except' => ['edit', 'create']
]);

RESTful 리소스 컨트롤러 설명서

암시 적 컨트롤러

암시 제어기는 더 유연하다. HTTP 요청 유형 및 이름을 기반으로 컨트롤러 메소드로 라우팅됩니다. 그러나 경로 이름이 정의되어 있지 않으며 동일한 경로에 대한 모든 하위 폴더를 잡습니다.

Route::controller('users', 'UserController');

일종의 RESTful 명명 체계를 사용하여 컨트롤러를 설정하도록 안내합니다.

class UserController extends BaseController {

    public function getIndex()
    {
        // GET request to index
    }

    public function getShow($id)
    {
        // get request to 'users/show/{id}'
    }

    public function postStore()
    {
        // POST request to 'users/store'
    }

}

암시 적 컨트롤러 설명서

선호도에 따라 필요한 것을 사용하는 것이 좋습니다. 나는 개인적으로 암시 적 컨트롤러를 좋아하지 않습니다 . 왜냐하면 컨트롤러 가 지저분하고 이름을 제공하지 않으며 사용할 때 혼란 스러울 수 있기 때문 php artisan routes입니다. 일반적으로 RESTful 리소스 컨트롤러 를 명시 적 라우트와 함께 사용 합니다.


답변

경로 컨트롤러 방법의 경우 하나의 경로 만 정의하면됩니다. get 또는 post 메소드에서 경로를 별도로 정의해야합니다.

그리고 resources 메소드는 다양한 쉼표 작업을 처리하기 위해 여러 경로를 만드는 데 사용됩니다.

여기에 대한 라 라벨 문서 .


답변