前言
控制器作为最常用的一个类,也比较简单,这里只简单梳理一下
因为常用的是web形式,这里就以 yii\web\Controller
为基础进行分析
属性
常用属性列表
执行操作
通过下面这两种方式执行action和正常的通过对象调用执行有什么区别?
直接通过对象调用的方式执行某个方法,只是执行了这个方法;而通过下面这两种方式(通过路由)执行的方式会完整的执行所属modules、controller的 beforeAction
和 afterAction
(动作过滤器)
runAction() 执行本控制器的action
通过本控制器的 actionId
完整的执行(就是包含动作过滤器)对应的 独立action 或 内联action
run() 根据路由相应的动作
看下面源码先有三种不同的情况
- 单独一个actionid 执行相对当前控制器下的action
- controllerid/actionid || module/controllerid/actionid 执行相对当前module下的路由
- /module/controllerid/actionid 执行绝对路由
其中第三种就是我们发送请求的时候所要执行的操作,而第二种其实和第三种是一样的($app
也是module),只不过使用当前module往后找
钩子方法||方法过滤器
就是在执行动作之前 beforeAction
进行请求过滤,在请求之后 afterAction
进行结果过滤,基础控制器中这两个方法都会触发响应的事件
看一下web在 beforeAction
进行的csrf验证
renderPartial 不使用layout
这个就更简单了,和 render()
方法的唯一区别就是不使用layout了
renderContent 将字符串填充到layout
就是将 $content
填充到layout文件中,上面的 render()
方法就用到了
renderFile 直接指定要渲染的文件路径
上面的三个方法,最终都需要通过 View::renderFile()
方法来获取文件数据的,只不过 render()
方法有找对应文件的规则罢了
独立动作 action
使用场景:多个控制器都用到同样的方法,或者是作为第三方扩展方便引入。只需要在控制器中配置一下,指定一下动作id,即可通过该控制器进行访问。
比较简单但又常用到,偷个懒直接 引用一下官方文档 内容
独立操作通过继承 yii\base\Action
或它的子类来定义。 例如Yii发布的 yii\web\ViewAction
和 yii\web\ErrorAction
都是独立操作。
要使用独立操作,需要通过控制器中覆盖 yii\base\Controller::actions()
方法在中申明, 如下例所示:
页面跳转
作为方便,这里封装了四个跳转相关的方法,其中用到的一些其他类的方法,请跳转到对应的文章查看
redirect 页面跳转
Url 帮助类
goHome 跳转到首页
|
|
goBack 返回上一页(上一个记录的链接)
这个依赖于 cookie
因为用的 session
进行保存访问记录的
首先在访问的时候记录一下访问的路由
refresh 刷新当前页
|
|