수색…
소개
요청 처리 논리를 모두 경로 파일의 Closures로 정의하는 대신 컨트롤러 클래스를 사용하여이 동작을 구성 할 수 있습니다. 컨트롤러는 관련 요청 처리 로직을 단일 클래스로 그룹화 할 수 있습니다. 컨트롤러는 기본적으로 app/Http/Controllers
디렉토리에 저장됩니다.
기본 컨트롤러
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function show($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}
이 컨트롤러 동작에 대한 경로를 다음과 같이 정의 할 수 있습니다.
Route::get('user/{id}', 'UserController@show');
이제 요청이 지정된 라우트 URI와 일치하면 UserController
클래스의 show
메소드가 실행됩니다. 물론 경로 매개 변수도 메서드에 전달됩니다.
컨트롤러 미들웨어
미들웨어는 라우트 파일의 컨트롤러 경로에 할당 될 수 있습니다.
Route::get('profile', 'UserController@show')->middleware('auth');
그러나 컨트롤러의 생성자 내에서 미들웨어를 지정하는 것이 더 편리합니다. 컨트롤러 생성자의 미들웨어 메소드를 사용하면 컨트롤러의 동작에 미들웨어를 쉽게 할당 할 수 있습니다.
class UserController extends Controller
{
/**
* Instantiate a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('log')->only('index');
$this->middleware('subscribed')->except('store');
}
}
자원 컨트롤러
Laravel 리소스 라우팅은 일반적인 "CRUD"경로를 코드 한 줄로 컨트롤러에 할당합니다. 예를 들어, 응용 프로그램에서 저장 한 "사진"에 대한 모든 HTTP 요청을 처리하는 컨트롤러를 만들 수 있습니다. make:controller
Artisan 명령을 사용하면 다음과 같은 컨트롤러를 빠르게 만들 수 있습니다.
php artisan make:controller PhotoController --resource
이 명령은 app/Http/Controllers/PhotoController.php
에서 컨트롤러를 생성합니다. 컨트롤러에는 사용 가능한 각 리소스 작업에 대한 메서드가 포함됩니다.
자원 제어기 모양 예
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
리소스 컨트롤러의 예제는 아래 표에 나와있는 메서드 이름을 공유합니다.
다음으로 컨트롤러에 대한 유용한 루트를 등록 할 수 있습니다.
Route::resource('photos', 'PhotoController');
이 단일 경로 선언은 리소스에 대한 다양한 작업을 처리하기 위해 여러 경로를 만듭니다. 생성 된 컨트롤러에는 HTTP 동작과 처리하는 URI를 알려주는 메모를 포함하여 각 동작에 대해 스텁 된 메서드가 이미 있습니다.
자원 제어기가 처리하는 조치
동사 | URI | 동작 | 경로 이름 |
---|---|---|---|
도망 | /photos | 색인 | photos.index |
도망 | /photos/create | 몹시 떠들어 대다 | photos.create |
우편 | /photos | 저장 | photos.store |
도망 | /photos/{photo} | 보여 주다 | photos.show |
도망 | /photos/{photo}/edit | 편집하다 | photos.edit |
PUT / PATCH | /photos/{photo} | 최신 정보 | photos.update |
지우다 | /photos/{photo} | 멸하다 | photos.destroy |