一、防止XSS攻击
模板语言自带防止XSS攻击
<? 变量 ?> // 这种防止不了XSS攻击
<?=Html::encode(变量) ?> // 防止XSS攻击,别忘记=号
二、服务定位器
所谓的服务定位器,就是把一些类进行实例化,然后存贮在一个容器里,可以直接调用,实现单实例引用,不需要再自己手动new一个实例。
Yii::$app // 这里面封存了request,db,response等等特定功能的组件(单实例)
Yii::$app->request->post() // 获取里面的request组件,并调用其post放啊
三、入口脚本
分为两个,第一个是yii.php,应用在命令中,命令行的入口脚本
第二个是web/index.php应用于接收,处理请求
// web/index.php这个入口脚本经常用于定义全局常量
define('test', 'test');
四、应用主体
应用主体是管理 Yii 应用系统整体结构和生命周期的对象。 每个 Yii 应用系统只能包含一个应用主体,应用主体在 入口脚本 中创建并能通过表达式 \Yii::$app 全局范围内访问。应用主体是服务定位器。
五、应用组件
应用主体里有多个应用组件,例如:request,response,db等。这些应用组件本质上就是一个个实例,可以通过应用主体Yii::$app来访问。
1.request 组件 用来收集用户请求并解析 路由;
2.db 代表一个可以执行数据库操作的数据库连接;
六、动作
简单来说就是控制器(类)里以action为开头命名方法
class xxx extends Controller{
public function actionAbc(){
}
}
七、控制器的生命周期
- 初始化
在控制器创建和配置后,yii\base\Controller::init() 方法会被调用 - 操作方法
根据请求来查看对应的action方法,若请求没有选择方法,如果为/,则直接调用默认方法。默认方法调用的是Index。
3.过滤器
behaviour,beforeAction,如果返回false就会终止请求,返回空 - 控制器方法执行
- 过滤器afterAction
- 响应
进行数据处理后就会进行响应,页面响应/json响应
过滤器类似中间件
八、模块的定义
一个模块是由MVC和其他小组件构成的。
九、请求处理过程(请求的生命周期)
- 入口组件
提交请求给web\index.php文件 - 初始化
入口组件会创建一个应用实例来处理请求 - 请求解析
对请求进行解析,匹配到相对应的控制器和方法 - 实例化
请求发送到控制器,控制器会先进行实例化 - 检查方法
会先进行方法的检查,看是否存在该方法。如果URL不带方法名,就会访问默认的方法名 - 前置过滤器
全部的前置过滤器验证,若有一个不通过,则中断请求 - 动作执行
请求进入动作,并经过一系列操作,连接数据库获取数据后返回数据 - 后置过滤器
经过后置过滤器,通过才继续返回数据 - 视图
若返回的是视图,则会先经过框架编译后,才会返回给浏览器进行渲染。
十、路由优化
1.当解析或创建URL时,URL manager 按照它们声明的顺序检查 URL 规则。 因此,您可以考虑调整 URL 规则的顺序,以便在较少使用的规则之前放置更具体和/或更常用的规则。
2.如果多个 URL 规则使用相同的前缀,你可以考虑使用 yii\web\GroupUrlRule, 这样作为一个组合,URL管理器会更高效。 特别是当应用程序由模块组合而成时,每个模块都有各自的 URL 规则且都有各自的模块 ID 作为前缀。
十一、组件的定义
组件是 Yii 应用的主要基石。是 yii\base\Component 类或其子类的实例。 三个用以区分它和其它类的主要功能有:
1.属性(Property)
类的成员变量也被称为属性。主要是需要在类里定义getter和setter来获取和修改数据,也就是类里面定义get+属性名和set+属性名的方法
$label = $object->label; 等价于触发了getter方法 $label = $object->getLabel();
$object->label = ‘abc’ 等价于触发了setter方法 $object->setLabel(‘abc’)
2.事件(Event)
当某种方法触发(代码执行)时,会附带执行自定义的某些代码,就是事件。把事件名传入trigger函数中,便会触发事件里的代码执行。
先进行绑定(方法名, 函数)->通过传入方法名到trigger里调用
3.行为(Behavior)
行为,也称为 mixins, 可以无须改变类继承关系即可增强一个已有的 组件 类功能。(新增属性与方法)
十二、ACF权限认证(存取过滤验证器)
public function behaviors(){
return ['access'=>[
'class' => AccessControl::className(),
'rules' => [
// 代表游客
['actions'=> ['login', 'error'], // 定义允许的动作
'allow' => true,
'roles' => ['?'],
],
// 代表已登陆
['actions'=>['logout', 'index'],
'allow'=>true,
'roles' => ['@'],
]
]
]]
}