thinkph5 路由技巧

路由到模块/控制器/操作
这是最常用的一种路由方式,把满足条件的路由规则路由到相关的模块、控制器和操作,然后由App类调度执行相关的操作。

同时会进行模块的初始化操作(包括配置读取、公共文件载入、行为定义载入、语言包载入等等)。

路由地址的格式为:

[模块/控制器/]操作?参数1=值1&参数2=值2…
解析规则是从操作开始解析,然后解析控制器,最后解析模块,例如:

// 路由到默认或者绑定模块
‘blog/:id’=>‘blog/read’,
// 路由到index模块
‘blog/:id’=>‘index/blog/read’,
Blog类定义如下:

namespace app\index\controller;

class Blog {
public function read(KaTeX parse error: Expected '}', got 'EOF' at end of input: …return 'read:'.id;
}
}路由到操作方法
路由地址的格式为:

@[模块/控制器/]操作
这种方式看起来似乎和第一种是一样的,本质的区别是直接执行某个控制器类的方法,而不需要去解析 模块/控制器/操作这些,同时也不会去初始化模块。
例如,定义如下路由后:

‘blog/:id’=>’@index/blog/read’,
系统会直接执行

Loader::action(‘index/blog/read’);
相当于直接调用 \app\index\controller\blog类的read方法。

Blog类定义如下:

namespace app\index\controller;

class Blog {
public function read(KaTeX parse error: Expected '}', got 'EOF' at end of input: …return 'read:'.id;
}
}
通常这种方式下面,由于没有定义当前模块名、当前控制器名和当前方法名 ,从而导致视图的默认模板规则失效,所以这种情况下面,如果使用了视图模板渲染,则必须传入明确的参数。

路由到类的方法
路由地址的格式为(动态方法):

\类的命名空间\类名@方法名
或者(静态方法)

\类的命名空间\类名::方法名
这种方式更进一步,可以支持执行任何类的方法,而不仅仅是执行控制器的操作方法,例如:

‘blog/:id’=>’\app\index\service\Blog@read’,
执行的是 \app\index\service\Blog类的read方法。
也支持执行某个静态方法,例如:

‘blog/:id’=>’\app\index\service\Blog::read’,
V5.0.4+版本开始,支持传入额外的参数作为方法的参数调用(用于参数绑定),例如:

‘blog/:id’=>’\app\index\service\Blog::read?status=1’,
路由到重定向地址
重定向的外部地址必须以“/”或者http开头的地址。

如果路由地址以“/”或者“http”开头则会认为是一个重定向地址或者外部地址,例如:

‘blog/:id’=>’/blog/read/id/:id’

‘blog/:id’=>‘blog/read’
虽然都是路由到同一个地址,但是前者采用的是301重定向的方式路由跳转,这种方式的好处是URL可以比较随意(包括可以在URL里面传入更多的非标准格式的参数),而后者只是支持模块和操作地址。举个例子,如果我们希望avatar/123重定向到
/member/avatar/id/123_small的话,只能使用:

‘avatar/:id’=>’/member/avatar/id/:id_small’
路由地址采用重定向地址的话,如果要引用动态变量,直接使用动态变量即可。

采用重定向到外部地址通常对网站改版后的URL迁移过程非常有用,例如:

‘blog/:id’=>‘http://blog.thinkphp.cn/read/:id’
表示当前网站(可能是http://thinkphp.cn )的 blog/123地址会直接重定向到 http://blog.thinkphp.cn/read/123。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值