>  기사  >  PHP 프레임워크  >  ThinkPHP5.2: 라우팅 조정 및 개선

ThinkPHP5.2: 라우팅 조정 및 개선

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼앞으로
2019-12-16 15:10:242446검색

ThinkPHP5.2: 라우팅 조정 및 개선

ThinkPHP5.2의 라우팅 부분은 다른 구성 요소와 마찬가지로 주로 다음 측면을 포함하여 간소화되고 최적화되었습니다.

라우트 정의의 반환 배열 형식 취소

라우팅에 도움이 되지 않기 때문입니다. 캐시 생성, 라우팅 정의 파일에서는 경로를 정의하기 위해 배열을 반환하는 방식을 취소하고, 라우팅 방식으로 경로를 등록해야 합니다.

예:

return [
    'hello/:name' => 'index/hello',
];

를 다음으로 변경해야 합니다.

Route::get('hello/:name', 'index/hello');

여러 애플리케이션에 대한 경로 정의 파일의 위치

단일 애플리케이션 모드에서 경로 정의 파일은 이전과 마찬가지로 경로 디렉터리 아래에 있습니다. 프로젝트 사용 여러 애플리케이션의 경우 경로 정의와 각 애플리케이션의 일치는 독립적이며 모듈 개념이 없습니다. 경로 정의 파일의 위치는 경로/응용 프로그램 하위 디렉터리에 있어야 합니다. 예:

route/index/route.php //  index应用的路由定义文件
route/index/web.php // index应用的第二个路由定义文件
route/admin/route.php //  admin应用的路由定义文件

기본 URL 규칙은

http://域名/入口文件(或者应用名)/控制器名/操作名

가 됩니다. 애플리케이션의 라우팅 규칙은 실제로 애플리케이션이 아니라 정의된 항목 파일(또는 애플리케이션 이름) 뒤의 URL 부분입니다.

자동 다중 애플리케이션

최신 버전 5.2는 동일한 항목 파일에서 여러 다른 애플리케이션에 대한 액세스를 지원할 수 있습니다(이전에는 각 애플리케이션에 해당 항목 파일을 추가해야 했습니다).

예를 들어, index.php 항목 파일에

(new App())->autoMulti()->run()->send();

를 사용하면 항목 파일을 생성하지 않고도 URL을 통해 여러 애플리케이션에 자동으로 액세스할 수 있습니다.

http://serverName/index.php/admin

기본 애플리케이션이 index가 아닌 경우(기본값은 항목 파일입니다) 이름), 이름을 전달할 수 있습니다. 메소드는 기본 애플리케이션을 지정합니다.

(new App())->autoMulti()
    ->name('admin')
    ->run()
    ->send();

는 애플리케이션 이름의 별칭 매핑을 지원합니다. 예:

(new App())->autoMulti([
    'think'    =>    'admin',  // 把admin应用映射为think
])->run()->send();

애플리케이션을 사용자 정의해야 하는 경우

(new App())->autoMulti([
    'admin'    =>   function($app) {
        $app->debug(true)->useClassSuffix();
    }
])->run()->send();

를 사용하여 별칭 라우팅을 취소할 수 있습니다.

제한된 사용 시나리오 및 성능 오버헤드 문제로 인해 취소하세요. 원래 별칭 라우팅 기능은 대신 리소스 라우팅이나 별도 라우팅을 사용하는 것이 좋습니다.

바로가기 라우팅 취소

제한된 사용 시나리오 및 사양 미준수로 인해 기존 컨트롤러 바로가기 라우팅 기능이 취소되었습니다.

빈 컨트롤러 및 빈 작동 취소

원래의 빈 컨트롤러 및 빈 작동 기능이 취소되었습니다. 대신 MISS 라우팅 기능을 사용하세요. 다른 라우팅 그룹에 대한 MISS 라우팅 설정을 지원할 수 있습니다. 동시에,empty_controller 구성은 폐기됩니다.

컨트롤러 자동 검색 취소

성능상의 이유로 라우팅의 다단계 컨트롤러 자동 검색 기능이 취소되었습니다. 라우팅 규칙 정의에 라우팅할 다단계 컨트롤러를 명확히 지정해 주세요.

라우팅 기능은 독립적으로 설계되었습니다.

라우팅 기능은 더 이상 고정적으로 실행되지 않으며 AppInit 이벤트에 대한 응답 리스너로 설계되었으며 프로젝트의 이벤트 정의에서 구성할 수 있습니다.

return [
    'bind'      => [
    ],
    'listen'    => [
        'AppInit'      => [
            'think\listener\LoadLangPack',
            'think\listener\RouteCheck',
        ],
        'AppBegin'     => [
            'think\listener\CheckRequestCache',
        ],
        'ActionBegin'  => [],
        'AppEnd'       => [],
        'LogLevel'     => [],
        'LogWrite'     => [],
        'ResponseSend' => [],
        'ResponseEnd'  => [],
    ],
    'subscribe' => [
    ],
];

AppInit 이벤트에서 thinklistenerRouteCheck 클래스가 실행됩니다. 애플리케이션이 라우팅 기능을 전혀 사용할 필요가 없다면 구성 파일에서 정의를 해제할 수 있으며 시스템은 기본 URL을 실행합니다. 스케줄링(즉, 컨트롤러/작업).

등록 방법의 옵션 및 패턴 매개변수 취소

경로 등록 방법의 옵션 및 패턴 매개변수 취소(rule/get/post/put/delete/patch/miss/group 및 기타 방법 포함) 및 모두 메서드 호출 형식으로 변경하세요. 예를 들어 원본:

Route::get('hello/:name', 'index/hello', [ 'ext'  =>  'html'], [ 'name'  => '\w+']);

Route::get('hello/:name', 'index/hello')
    ->ext('html')
    ->pattern([ 'name'  => '\w+']);

로 변경해야 합니다. 경로 그룹 정의는 더 이상 배열을 지원하지 않습니다.

그룹의 중첩 기능에 도움이 되지 않기 때문에 경로 그룹 정의는 더 이상 배열을 지원하지 않으며 클로저를 통해서만 정의할 수 있습니다. 예:

Route::group('blog', [
    ':id' => 'Blog/read',
    ':name' => 'Blog/read',
])->ext('html')->pattern(['id' => '\d+']);

Route::group('blog', function() {
    Route::get(':id', 'Blog/read');
    Route::get(':name', 'Blog/read');
})->ext('html')->pattern(['id' => '\d+']);

로 변경해야 합니다. 가상 라우팅 그룹을 등록해야 하는 경우 첫 번째 매개변수

Route::group(function() {
    Route::get('blog/:id', 'Blog/read');
    Route::get('user/:name', 'User/read');
})->ext('html')->pattern(['id' => '\d+']);

에서 클로저를 직접 사용할 수 있습니다. url_controller_layer 구성을 취소하세요.

메소드 설정 대신 항목 파일에서 ControllerLayer를 사용하세요.

(new App())->controllerLayer('Action')
    ->run()
    ->send();

class_suffix 구성 취소

대신 항목 파일의 useClassSuffix 메소드를 사용하여 설정하세요.

(new App())->useClassSuffix(true)
    ->run()
    ->send();

controller_suffix 및 class_suffix 구성 매개변수를 동시에 취소하세요.

mergeExtraVars 메서드 및 해당 매개변수 취소

대신 라우팅 규칙에 변수 규칙을 명시적으로 지정하세요.

헤더 메소드 매개변수 유형 조정

강력한 유형 제약으로 인해 헤더 메소드가 배열 매개변수 전달만 지원하도록 변경되었습니다.

강력한 형식의 매개변수 사용

강력한 형식의 매개변수가 완전히 활성화되고 엄격 모드가 사용되므로 매개변수의 유형에 주의하세요.

많은 ThinkPHP 입문 튜토리얼, 모두 PHP 중국어 웹사이트에 있습니다. 온라인 학습을 환영합니다!

이 기사는 https://blog.thinkphp.cn/916515

에서 복제되었습니다.

위 내용은 ThinkPHP5.2: 라우팅 조정 및 개선의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 thinkphp.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제