프레임워크 경로가 정의되는 방법


라우팅은 접근할 서버 자원을 찾아주는 기술입니다!


라우트 등록

가장 기본적인 라우트 정의 방법은 `Route::rule('라우팅 표현식''입니다. , '라우팅 주소', '요청 유형')`

use think\facade\Route;

단일 애플리케이션을 예로 들어보겠습니다:

// 注册路由到News控制器的read操作
Route::rule('new/:id','News/read');

우리가

http://serverName/new/5

를 방문하면 자동으로

http://serverName/news/read/id/5

로 라우팅되고 원래 액세스 주소는 자동으로 무효가 됩니다.

규칙 메소드에서 요청 유형을 지정할 수 있습니다(지정하지 않으면 기본적으로 모든 요청 유형이 유효합니다). 예:

Route::rule('new/:id', 'News/update', 'POST');

요청 유형 매개변수는 대소문자를 구분하지 않습니다.

은 정의된 라우팅 규칙이 POST 요청에서만 유효함을 의미합니다. GET 및 POST 요청에서 지원되는 라우팅 규칙을 정의하려면 다음을 사용할 수 있습니다.

Route::rule('new/:id','News/read','GET|POST');

그러나 일반적으로 다음을 포함하여 요청 유형에 해당하는 바로가기 방법을 사용하는 것이 좋습니다.


TypeDescription 바로가기 방법
GETGET 요청get
POSTPOST 요청post
PUT PUT 요청put
DELETEDELETE requestdelete
PATCHPATCH 요청patch
*모든 요청 유형any


빠른 등록 방법의 사용법은 다음과 같습니다.

경로::단축 방법 이름('라우팅 표현', '라우팅 주소')

사용 예는 다음과 같습니다.

Route::get('new/<id>','News/read'); // 定义GET请求路由规则
Route::post('new/<id>','News/update'); // 定义POST请求路由规则
Route::put('new/:id','News/update'); // 定义PUT请求路由规则
Route::delete('new/:id','News/delete'); // 定义DELETE请求路由规则
Route::any('new/:id','News/read'); // 所有请求都支持的路由规则

여러 개의 라우팅 규칙을 등록한 후, 시스템은 요청 유형을 충족하는 등록된 라우팅 규칙을 순회합니다. 올바른 라우팅 규칙이 일치하면 최종 스케줄링 방법이 실행되고 후속 규칙은 더 이상 감지되지 않습니다.

규칙 표현식

규칙 표현식에는 일반적으로 정적 규칙과 동적 규칙은 물론 두 규칙의 조합도 포함됩니다. 예를 들어 다음은 모두 유효한 규칙 표현식입니다.

Route::rule('/', 'index'); // 首页访问路由
Route::rule('my', 'Member/myinfo'); // 静态地址路由
Route::rule('blog/:id', 'Blog/read'); // 静态地址和动态地址结合
Route::rule('new/:year/:month/:day', 'News/read'); // 静态地址和动态地址结合
Route::rule(':user/:blog_id', 'Blog/read'); // 全动态地址

정규 표현식의 정의에는 /가 사용됩니다. 매개변수 구분 기호(PATH_INFO 구분 기호 설정에 관계없이 조합 변수를 사용하지 않는 한 라우팅 규칙 표현식을 정의할 때 URL 매개변수 분할을 균일하게 사용/수행해야 합니다).

각 매개변수는 동적 변수를 포함할 수 있습니다. 예를 들어 변수 또는 <변수>는 모두 동적 변수를 나타내며(새 버전에서는 혼합 변수 정의에 더 도움이 되는 두 번째 방법을 사용할 것을 권장합니다) 자동으로 해당 변수에 바인딩됩니다. 작동 방법 매개변수.

URL 액세스 PATH_INFO 구분 기호는 pathinfo_depr을 사용하여 구성되지만 어떻게 구성하더라도 라우팅 규칙 표현식의 라우팅 구분 기호 정의에 영향을 주지 않습니다.

옵션 변수

는 라우팅 매개변수의 선택적 정의를 지원합니다. 예:

Route::get('blog/:year/[:month]','Blog/archive');
// 或者
Route::get('blog/<year>/<month?>','Blog/archive');

변수에 [ ]가 포함되어 있으면 해당 변수가 경로 일치를 위한 선택적 변수라는 의미입니다.

위의 라우팅 규칙을 정의한 후 다음 URL 액세스 주소가 올바른 경로와 일치할 수 있습니다.

http://serverName/index.php/blog/2015
http://serverName/index.php/blog/2015/12

선택적 변수 정의를 사용한 후 이전에 두 개 이상의 라우팅 규칙을 정의해야 했던 상황을 하나의 라우팅 규칙으로 병합할 수 있습니다.

옵션 매개변수는 라우팅 규칙의 마지막에만 배치할 수 있습니다. 옵션 매개변수를 중간에 사용하면 이후 변수는 선택 매개변수가 됩니다.

정확한 일치

규칙 일치 감지 중에는 기본적으로 URL 주소의 시작 부분에 정의된 라우팅 규칙이 포함되어 있으면 일치가 성공합니다. URL을 완전히 일치시키려면 $ 기호를 사용하여 라우팅 표현식 끝에 추가할 수 있습니다. 예:

Route::get('new/:cate$', 'News/category');

이 정의 후에

http://serverName/index.php/new/info

는 성공적으로 일치하지만

http://serverName/index.php/new/info/2

는 성공적으로 일치하지 않습니다.

Route::get('new/:cate', 'News/category');

방식으로 정의하면 두 URL 접근 방식 모두 성공적으로 매칭될 수 있습니다.

전체적으로 URL을 완전히 일치시켜야 하는 경우 라우팅 구성 파일에서

// 开启路由完全匹配
'route_complete_match'   => true,

추가 매개변수를 설정할 수 있습니다.

라우팅 점프 시 추가로 들어오는 매개변수 쌍을 지원합니다(추가 매개변수는 URL에 없는 매개변수를 참조함) , 필요한 작업을 암시적으로 전달하는 것은 때때로 보안 보호에서 특정 역할을 할 수 있습니다. 이에 대해서는 나중에 언급하겠습니다. 예:

Route::get('blog/:id','blog/read')
    ->append(['status' => 1, 'app_id' =>5]);

위 라우팅 규칙 정의에서 status 및 app_id 매개변수는 URL에 존재하지 않으며 암시적 값 전송입니다. 물론 반드시 필요한 것은 아니지만 필요할 때 사용할 수 있습니다. 다양한 경로에 대해 다양한 추가 매개변수를 설정할 수 있습니다.

append 메소드의 변수와 라우팅 규칙이 충돌하는 경우, Append 메소드에 전달된 변수가 우선 적용됩니다.

RouteIdentifier

경로를 기반으로 URL 주소를 빠르게 생성해야 하는 경우 경로를 정의할 때 생성 식별자를 지정할 수 있습니다(단, 고유한지 확인하세요).

예를 들어 라우팅 주소를 생성할 때

// 注册路由到News控制器的read操作
Route::rule('new/:id','News/read')
    ->name('new_read');

를 사용할 수 있습니다.

url('new_read', ['id' => 10]);

라우팅 식별자가 정의되지 않은 경우 시스템은 기본적으로 라우팅 주소를 라우팅 식별자로 사용합니다. 예를 들어 다음과 같은 방법을 사용할 수 있습니다.

url('News/read', ['id' => 10]);

forced Routing
을 생성하려면 라우팅 구성 파일에서

'url_route_must'		=>  true,

홈 페이지에 대한 라우팅 규칙을 설정하세요. 예를 들어 다음 경로는 Hello, world!

Route::get('/', function () {
    return 'Hello,world!';
})



을 출력합니다.