Home > PHP Framework > ThinkPHP > ThinkPHP5.2: Routing adjustments and improvements

ThinkPHP5.2: Routing adjustments and improvements

爱喝马黛茶的安东尼
Release: 2019-12-16 15:10:24
forward
2499 people have browsed it

ThinkPHP5.2: Routing adjustments and improvements

The routing part of ThinkPHP5.2, like other components, has been streamlined and optimized, mainly including the following aspects:

Cancel the return of route definition Array form

Because it is not conducive to route cache generation, the route definition file cancels the method of returning an array to define routes, and the routing method must be used to register the route.

For example:

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

must be changed to:

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

Routing definition file location for multiple applications

Single application In mode, the route definition file is under the route directory as before. If your project uses multiple applications, the route definition and matching of each application are independent, and there is no concept of modules. The location of the route definition file It should be under the route/application subdirectory, for example:

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

The default URL rule becomes

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

The routing rule of the application is actually the defined entry file ( or the part of the URL after the application name), excluding the application.

Automatic multi-application

The latest version 5.2 can support accessing multiple different applications in the same entry file (previously one must be added for each application Corresponding entry file).

For example, use in the index.php entry file:

(new App())->autoMulti()->run()->send();
Copy after login

You can automatically access multiple applications through URLs without creating an entry file

http://serverName/index.php/admin
Copy after login

If your default application is not index (The default is the entry file name), then you can specify the default application through the name method.

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

Supports alias mapping of application names, for example:

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

If you need to customize an application, you can use

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

to cancel alias routing

Due to limited usage scenarios and performance overhead issues, the original alias routing function is cancelled, and it is recommended to use resource routing or a separate route instead.

Cancel shortcut routing

Because the usage scenarios are limited and do not meet the specifications, the original controller shortcut routing function has been cancelled.

Cancel empty controller and empty operation

The original empty controller and empty operation function has been cancelled. Please use the MISS routing function instead, and it can support different Routing grouping sets up MISS routing. At the same time, the empty_controller configuration is discarded.

Cancel automatic search of controllers

Due to performance reasons, the automatic search function of multi-level controllers for routing has been cancelled. Please clearly specify the route to be routed in the routing rule definition. Multi-level controller.

The routing function is designed independently

The routing function is no longer fixedly executed, and is designed to be a response monitor for the AppInit event, and can be configured in the event definition of the project. The system defaults The definition and configuration are as follows:

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

The think\listener\RouteCheck class will be executed in the AppInit event. If your application does not need to use any routing function at all, you can cancel the definition in the configuration file, and the system will Execute the default URL dispatch (i.e. controller/action).

Option and pattern parameters of the cancel registration method

Cancel the route registration method (including rule/get/post/put/delete/patch/miss/group and other methods) The option and pattern parameters are all changed to the method calling form. For example, the original:

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

needs to be changed to

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

Routing group definition no longer supports arrays

Because it is not conducive to the nesting function of groups, routing group definitions no longer support arrays and can only be defined using closures. For example:

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

must be changed to

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

if you need To register a virtual routing group, you can directly use the closure in the first parameter

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

Cancel the url_controller_layer configuration

Instead use the controllerLayer method setting in the entry file .

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

Cancel the class_suffix configuration

Instead use the useClassSuffix method in the entry file.

(new App())->useClassSuffix(true)
    ->run()
    ->send();
Copy after login

Cancel the controller_suffix and class_suffix configuration parameters at the same time.

Cancel the mergeExtraVars method and corresponding parameters

Instead, explicitly specify the variable rules in the routing rules.

Header method parameter type adjustment

Due to strong type constraints, the header method is changed to only support the passing of array parameters.

Use strong type parameters

Since strong type parameters are fully enabled and strict mode is used, be sure to pay attention to the type of the parameters.

Many ThinkPHP introductory tutorials, all on the PHP Chinese website, welcome to learn online!

This article is reproduced from: https://blog.thinkphp.cn/916515

The above is the detailed content of ThinkPHP5.2: Routing adjustments and improvements. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:thinkphp.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template