上一篇文章讲解“路由 - 组合变量规则+动态路由”,本篇文章讲解“路由 - 路由到模块/控制器/操作/操作方法”。
路由地址
路由地址表示定义的路由表达式最终需要路由到的地址以及一些需要的额外参数,支持下面几种方式定义:
路由到模块/控制器/操作
这是最常用的一种路由方式,把满足条件的路由规则路由到相关的模块、控制器和操作,然后由App类调度执行相关的操作。
同时会进行模块的初始化操作(包括配置读取、公共文件载入、行为定义载入、语言包载入等等)。
解析规则是从操作开始解析,然后解析控制器,最后解析模块。
1. 路由到模块/控制器/操作的基本用法
①新建Index控制器,并新建modelFun方法
②设置modelFun方法的路由
预览:
③路由地址中模块名可以省略,省略后路由到默认或绑定的模块,修改modelFun方法的路由
预览:
注意:
1. 路由地址中模块名可以省略,省略后路由到默认或绑定的模块。
默认的模块在配置文件(config)中设置:
绑定模块在入口文件中绑定:
2. 路由地址中支持多级控制器
①创建多级控制器
控制器路径:application/index/controller/grou
②设置多级控制器的路由
预览:
3. 路由到动态的模块、控制器或者操作
重新设置modelFun方法的路由:
预览:
4. 额外参数
在这种方式路由跳转的时候支持额外传入参数对(额外参数指的是不在URL里面的参数,隐式传入需要的操作中,有时候能够起到一定的安全防护作用,在之前“路由定义”中有说明,后面我们也会提到)。
①在Index控制器中,新建otherFun方法
②设置otherFun方法的路由,传入额外参数
预览:
上面的路由规则定义中额外参数status和flg参数都是URL里面不存在的,属于隐式传值,当然并不一定需要用到,只是在需要的时候可以使用。
路由到操作方法
路由到操作方法:
这种方式看起来似乎和第一种是一样的,本质的区别是直接执行某个控制器类的方法,而不需要去解析模块/控制器/操作这些,同时也不会去初始化模块(因此不会调用模块的初始化方法)。
①在Index控制器中,新建actionFun方法:
②设置actionFun方法的路由
预览:
注意:
1. 路由Route::get('action/:id','@index/index/actionFun');相当于直接调用\app\index\controller\index类的actionFun方法,不需要去解析\app\index\controller\index这些。
2. 通常这种方式下面,由于没有定义当前模块名、当前控制器名和当前方法名,从而导致视图的默认模板规则失效,所以这种情况下面,如果使用了视图模板渲染,则必须传入明确的参数而不是留空。
ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员
关注卓象程序员,定期发布技术文章
下一篇讲解“路由 - 路由地址 - 路由到类的方法/重定向地址”