计算机网络/计算机科学与应用/系统/运维/开发

Tp5.0 路由

路由:

默认规则PATHINFO模式

http://server/module/controller/action/param/value/


路由模式:

url_route_on url_route_must控制路由行为

三种路由模式:普通模式、混混模式和强制模式


普通模式

禁用路由,按照PATHINFO模式解析请求

'url_route_on' => false,


混合模式

PATHINFO模式 + 路由定义解析

'url_route_on' =>true,

'url_route_must' => false,


强制模式

'url_route_on' =>true,

'url_route_must'=>true,


路由定义

application/route.php 

Route::rule('路由表达式','路由地址','请求方法','路由条件','变量规则');


实例:

Route::rule('news/:id','index/News/read');


Route::get('news/:id','News/read'); // GET

Route::post('news/:id','News/update');// POST

Route::put('news/:id','News/update');//PUT

Route::delete('news/:id','News/delete');//DELETE

Route::any('new/:id','News/read'); // 任意请求方法


同一个路由可以同时支持多种请求方法,使用 | 分隔

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


配置定义:

返回数组定义路由,可以批量定义,简化代码编写量


     <?php

     return [

     // 首页路由到index模块index控制器的index方法

     '/' => 'index/index/index',

     'news/:id'  =>  'index/News/read', // 变量定义

     'news/[:id]'  =>  'index/news/read', // 可选变量定义

     'news/:id$'  =>  'index/news/read', // 完全匹配

     'user/:id'  =>  'index/user/show?status=1', // 传递隐式参数

     // 限制变量类型

     'post/:id'=>  ['index/post/show',['ext'=>'html'],['id'=>'\d{4}']],

     ];


路由条件

路由参数是指可以设置一些路由匹配的条件参数,主要用于验证当前的路由规则是否有效


参数 说明

method 请求类型检测,支持多个请求类型

ext URL后缀检测,支持匹配多个后缀

deny_ext URL禁止后缀检测,支持匹配多个后缀

https 检测是否https请求

domain 域名检测

before_behavior 前置行为(检测)

after_behavior 后置行为(执行)

callback 自定义检测方法

merge_extra_vars 合并额外参数

bind_model 绑定模型(V5.0.1+)

cache 请求缓存(V5.0.1+)

param_depr 路由参数分隔符(V5.0.2+)

ajax Ajax检测(V5.0.2+)

pjax Pjax检测(V5.0.2+)


'news/:id'=>[

        'news/show/:name$',

        [

            // 只允许GET或POST

            'method' => 'get|post',

            // 只允许shtml后缀

            'ext' =>'shtml',

            // 不允许shtml后缀

            'deny_ext' => 'shtml',

            // 只允许https

            'https'=>true,

        ]

    ]


路由地址:

路由地址就是路由匹配成功之后需要执行的操作


支持以下几种方法:

路由到模块 / 控制器

 'news/:id' =>'index/news/read'


控制器:

<?php 

namespace app\index\controller;


class News {

    public function read($id){

          echo '当前显示'.$id.'的新闻';

   }

}

控制器支持无限级设置,例如下面的路由定义将会执行app\index\controller\site\news控制器的read方法

'news/:id'=>'index/site.news/read'


重定向

重定向和路由的区别是,重定向会在浏览器中产生一次301或302响应,而路由是浏览器无感知的。

重定向以“/”(站内,请特别注意不要忘记斜杠)或“http”或“https”开始,站内跳转如下:


'news/:id' =>'/news/show/:id.html'

访问/news/id链接时,浏览器将会产生301响应,跳转到/news/show/id.html地址

站外跳转如下:

'news/:id' =>'http://www.example.com/news/:id.html'


路由到控制器方法

不需要去解析模块/控制器/操作,同时也不会去初始化模块

例如:定义将会执行index模块的news控制器的read方法

'news/:id' =>'@index/news/read'


路由到类静态方法

此类路由支持任何类的静态方法,包括控制器。例如,下面的定义将会路由到index模块中News控制器的静态read方法


'news/:id' =>'app\index\controller\News::read'


路由到闭包函数

直接在application/route.php 定义

Route::get('news/:id',function($id){

    return '访问'.$id.'的新闻';

})


你努力了什么,也就成就了什么,与其羡慕别人,不如蜕变自己。

评论

^