수색…


소개

요청 처리 논리를 모두 경로 파일의 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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow