나는 Laravel 웹 사이트, 스택 오버플로에 문서를 읽고, 구글하지만 여전히 차이 이해가 안 Route::resource
와 Route::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']
]);
암시 적 컨트롤러
암시 제어기는 더 유연하다. 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 메소드는 다양한 쉼표 작업을 처리하기 위해 여러 경로를 만드는 데 사용됩니다.
여기에 대한 라 라벨 문서 .