반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

오늘부터 공부한다

1. 라라벨 공식문서 라우팅 정리 본문

Laravel

1. 라라벨 공식문서 라우팅 정리

1000hg 2022. 1. 18. 09:43
반응형

1. 기본 라우팅

 

라라벨 라우터는 URI와 클로저를 허용하므로 복잡한 라우팅 구성 파일 없이도 간단하고 표현적인 방법을 제공합니다.

use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {
    return 'Hello World';
});

 

a. 기본 경로 파일

 

모든 라우터의 경로는 App\Providers\RouteServiceProvider에 의해 자동으로 로드 되며

routes\web.php 파일은 웹 인터페이스용 경로를 정의합니다.

 

이러한 경로에는 웹 미들웨어 그룹이 할당되어 세션 상태 및 CSRF 보호와 같은 기능을 제공합니다.

routes/web.php에 정의된 경로는 브라우저에서 정의된 라우트의 URL을 입력하여 액세스할 수 있습니다.

 

 

b. 사용 가능한 라우터

 

라우터는 기본적으로 모든 HTTP 동사를 제공합니다.사용방법은 아래와 같습니다.

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

여러 HTTP 동사에 응답하는 경로를 등록해야 할 수도 있습니다.

그럴때는 match, any를 사용하여 모든 HTTP 동사에 응답하는 경로를 등록할 수도 있습니다 .

Route::match(['get', 'post'], '/', function () {
    //
});

Route::any('/', function () {
    //
});

 

더보기

동일한 URI를 공유하는 여러 경로를 정의할 때 get, post, put, patch, delete및 메서드를 사용하는 경로를 options을 사용하는 경로보다 먼저 정의해야 합니다 . 이렇게 하면 들어오는 요청이 올바른 경로와 일치하는지 확인할 수 있습니다.

 

 

c. 의존성 주입

 

경로의 콜백에서 경로에 필요한 종속성을 입력할 수 있습니다. 

선언된 종속성은 Laravel 서비스 컨테이너 에 의해 자동으로 해결되고 콜백에 주입됩니다. 

use Illuminate\Http\Request;

Route::get('/users', function (Request $request) {
    // ...
});

 

d. CSRF 보호

 

POST, PUT, PATCH가 들어가는 html 양식에서 CSRF 토큰 필드가 포함되지 않으면 요청이 거부됩니다.

<form method="POST" action="/profile">
    @csrf
    ...
</form>

 

2. 경로 재지정

다른 URI로 리디렉션되는 경로를 정의하는 경우 Route::redirect를 사용할 수 있습니다. 

이 방법은 간단한 리디렉션을 수행하기 위해 전체 경로나 컨트롤러를 정의할 필요가 없도록 편리한 바로 가기를 제공합니다.

Route::redirect('/here', '/there');

기본적으로 상태 코드를 반환합니다. 

선택적으로 세 번째 매개변수를 사용하여 상태 코드를 정의할 수 있습니다.

Route::redirect('/here', '/there', 301);

 

또는 Route::permanentRedirect 메서드를 사용하여 상태 코드를 반환할 수 있습니다.

Route::permanentRedirect('/here', '/there');

 

3. 경로 보기

경로를 반환해야 하는 경우 Route::view메서드를 사용할 수 있습니다 . 

 view메서드는 URI를 첫 번째 인수로 받아들이고 보기 이름을 두 번째 인수로 받아들입니다. 

또한 선택적 세 번째 인수로 뷰에 전달할 데이터 배열을 제공할 수 있습니다.

Route::view('/welcome', 'welcome');

Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

 

4. 경로 매개변수

a. 필수 매개변수

 

때로는 경로 내에서 URI의 세그먼트를 가져와야 합니다. 

Route::get('/user/{id}', function ($id) {
    return 'User '.$id;
});

경로에 필요한 만큼 경로 매개변수를 정의할 수 있습니다.

Route::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

경로 매개변수는 항상 {}중괄호로 묶여 있으며 알파벳 문자로 구성되어야 합니다. 

밑줄(_)은 경로 매개변수 이름에서도 사용할 수 있습니다. 

경로 매개변수는 순서에 따라 경로 콜백/컨트롤러에 주입됩니다.

경로 콜백/컨트롤러 인수의 이름은 중요하지 않습니다.

 

b. 매개변수 및 종속성 주입

 

라우트에 Laravel 서비스 컨테이너가 라우트의 콜백에 자동으로 삽입하기를 원하는 종속성이 있는 경우 종속성 다음에 라우트 매개변수를 나열해야 합니다.

 

use Illuminate\Http\Request;

Route::get('/user/{id}', function (Request $request, $id) {
    return 'User '.$id;
});

 

5. 선택적 매개변수

경우에 따라 URI에 항상 존재하지 않을 수 있는 경로 매개변수를 지정해야 할 수도 있습니다. ?매개변수 이름 뒤에 표시를 하면 됩니다 . 경로의 해당 변수에 기본값을 지정해야 합니다.

 

Route::get('/user/{name?}', function ($name = null) {
    return $name;
});

Route::get('/user/{name?}', function ($name = 'John') {
    return $name;
});

 

6. 정규식 제약 조건

where 라우터 인스턴스의 메소드를 사용하여 라우트 매개변수의 형식을 제한할 수 있습니다. 

where메서드는 매개변수의 이름과 매개변수를 제한하는 방법을 정의하는 정규식을 허용합니다.

 

Route::get('/user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');

Route::get('/user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('/user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

편의를 위해 일반적으로 사용되는 일부 정규식 패턴에는 경로에 패턴 제약 조건을 빠르게 추가할 수 있는 도우미 메서드가 있습니다.

 

Route::get('/user/{id}/{name}', function ($id, $name) {
    //
})->whereNumber('id')->whereAlpha('name');

Route::get('/user/{name}', function ($name) {
    //
})->whereAlphaNumeric('name');

Route::get('/user/{id}', function ($id) {
    //
})->whereUuid('id');

들어오는 요청이 경로 패턴 제약 조건과 일치하지 않으면 404 HTTP 응답이 반환됩니다.

 

 

a. 전역 제약 조건

 

경로 매개변수가 항상 주어진 정규 표현식에 의해 제한되도록 하려면

pattern방법을 사용할 수 있습니다.

 

App\Providers\RouteServiceProvider

/**
 * Define your route model bindings, pattern filters, etc.
 *
 * @return void
 */
public function boot()
{
    Route::pattern('id', '[0-9]+');
}

패턴이 정의되면 해당 매개변수 이름을 사용하는 모든 경로에 자동으로 적용됩니다.

Route::get('/user/{id}', function ($id) {
    // Only executed if {id} is numeric...
});

 

b. 인코딩된 슬래시

 

라라벨 라우팅 컴포넌트는 /라우트 매개변수 값 내에 존재하는 것을 제외한 모든 문자를 허용합니다. 

조건 정규식 /을 사용하여 자리 표시자의 일부가 되도록 명시적으로 허용해야 합니다.

 

Route::get('/search/{search}', function ($search) {
    return $search;
})->where('search', '.*');

 

7. 명명된 경로

명명된 경로를 사용하면 특정 경로에 대한 URL 또는 리디렉션을 편리하게 생성할 수 있습니다. 

name라우트 정의에 메소드를 연결하여 라우트의 이름을 지정할 수 있습니다.

경로 이름은 항상 고유적이어야 합니다.

Route::get('/user/profile', function () {
    //
})->name('profile');

컨트롤러 작업에 대한 경로 이름을 지정할 수도 있습니다.

Route::get(
    '/user/profile',
    [UserProfileController::class, 'show']
)->name('profile');

 

 

a. 명명된 경로에 대한 URL 생성

 

주어진 라우트에 이름을 할당하고 나면 URL을 생성하거나 Laravel route및 redirect도우미 기능을 통해

리디렉션할 때 해당 라우트의 이름을 사용할 수 있습니다.

// Generating URLs...
$url = route('profile');

// Generating Redirects...
return redirect()->route('profile');

명명된 경로가 매개변수를 정의하는 경우 매개변수를 함수의 두 번째 인수로 전달할 수 있습니다. 

주어진 매개변수는 생성된 URL의 올바른 위치에 자동으로 삽입됩니다.

Route::get('/user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1]);

배열에 추가 매개변수를 전달하면 해당 키/값 쌍이 자동으로 생성된 URL의 쿼리 문자열에 추가됩니다.

Route::get('/user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1, 'photos' => 'yes']);

// /user/1/profile?photos=yes

 

 

반응형