프레임워크 경로가 정의되는 방법
라우팅은 접근할 서버 자원을 찾아주는 기술입니다!
라우트 등록
가장 기본적인 라우트 정의 방법은 `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');
그러나 일반적으로 다음을 포함하여 요청 유형에 해당하는 바로가기 방법을 사용하는 것이 좋습니다.
Type | Description | 바로가기 방법 |
---|---|---|
GET | GET 요청 | get |
POST | POST 요청 | post |
PUT | PUT 요청 | put |
DELETE | DELETE request | delete |
PATCH | PATCH 요청 | 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!'; })
을 출력합니다.