PHP之Yii框架学习总结

时间:2022-10-21 07:38:48

Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架。
Yii 自带了丰富的功能 ,包括:

  • 模型-视图-控制器(MVC)设计模式: Yii在WEB编程中采用这一成熟的技术从而可以更好的将逻辑层和表现层分开
  • 与jQuery整合:作为最流行的JavaScript框架之一,jQuery可以编写高效而灵活的JavaScript接口。
  • 分层缓存方案: Yii支持数据缓存,页面缓存,片段缓存和动态内容。缓存的存储介质,可以轻松地更改而不触及应用程序代码。
  • 错误处理和日志记录:错误的处理很好的呈现出来,日志信息可以分类,过滤并分配到不同的位置。
  • 安全: Yii配备了许多安全的措施,以帮助安全的Web应用程序,以防止网络攻击。这些措施包括跨站点脚本(XSS)预防,跨站点请求伪造(CSRF)预防,Cookie篡改预防等。
  • 自动代码生成: Yii提供了可以自动生成的代码的工具,根据你的需要,例如生成一个程序骨架,CRUD应用等等。
  • 完全面向对象: Yii框架坚持严格的面向对象编程范式。它没有定义任何全局函数或变量。而且,它定义的类层次结构允许最大的可重用性和定制。
  • 详细的文档:每一个单一的方法或属性都非常清楚的记录着。同时提供了一个全面的教程和一些新手教程。

Yii的优势

Yii容易学习和使用。只需要知道PHP和面向对象编程,便可以很快上手,而不必事先去学习一种新的架构或者模板语言。
用Yii的开发速度非常之快,除框架本身之外,需要为应用所写的编码极少。造就了Yii是最高效的开发框架之一。

  • Yii 具有高度的可重用性和可扩展性,是纯粹的面向对象。
  • Yii中的一切都是独立的可被配置,可重用,可扩展的组件。
  • 更重要的是Yii有着越来越多的扩展库。主要由使用者贡献出的组件组成,这可能有助于大大减少开发时间。

Sessions 和 Cookies

Sessions 和 cookies 允许数据在多次请求中保持, 在纯PHP中,可以分别使用全局变量$_SESSION$_COOKIE 来访问,Yii将session和cookie封装成对象并增加一些功能, 可通过面向对象方式访问它们。

HTTP 缓存

除了服务器端缓存外, Web 应用还可以利用客户端缓存(HTTP 缓存)去节省相同页面内容的生成和传输时间。
通过配置 yii\filters\HttpCache 过滤器,控制器操作渲染的内容就能缓存在客户端。

缓存有关的 HTTP 头

  • Last-Modified

使用时间戳标明页面自上次客户端缓存后是否被修改过。

通过配置 yii\filters\HttpCache::lastModified 属性向客户端发送 Last-Modified 头。返回的是页面修改时的 Unix 时间戳。
Demo

public function behaviors()
{

return [
[
'class' => 'yii\filters\HttpCache',
'only' => ['index'],
'lastModified' => function ($action, $params) {
$q = new \yii\db\Query();
return $q->from('post')->max('updated_at');
},
],
];
}

上述代码表明 HTTP 缓存只在 index 操作时启用。它会基于页面最后修改时间生成一个 Last-Modified HTTP 头。当浏览器第一次访问 index 页时,服务器将会生成页面并发送至客户端浏览器。之后客户端浏览器在页面没被修改期间访问该页,服务器将不会重新生成页面,浏览器会使用之前客户端缓存下来的内容。因此服务端渲染和内容传输都将省去。

  • ETag 头

“Entity Tag”(实体标签,简称 ETag)使用一个哈希值表示页面内容。如果页面被修改过,哈希值也会随之改变。通过对比客户端的哈希值和服务器端生成的哈希值,浏览器就能判断页面是否被修改过,进而决定是否应该重新传输内容。
通过配置 yii\filters\HttpCache::etagSeed 属性向客户端发送 ETag 头。返回的是一段种子字符用来生成 ETag 哈希值。
Demo

public function behaviors()
{

return [
[
'class' => 'yii\filters\HttpCache',
'only' => ['view'],
'etagSeed' => function ($action, $params) {
$post = $this->findModel(\Yii::$app->request->get('id'));
return serialize([$post->title, $post->content]);
},
],
];
}

上述代码表明 HTTP 缓存只在 view 操作时启用。它会基于用户请求的标题和内容生成一个 ETag HTTP 头。当浏览器第一次访问 view 页时,服务器将会生成页面并发送至客户端浏览器。之后客户端浏览器标题和内容没被修改在期间访问该页,服务器将不会重新生成页面,浏览器会使用之前客户端缓存下来的内容。因此服务端渲染和内容传输都将省去。

  • Cache-Control 头

Cache-Control 头指定了页面的常规缓存策略。可以通过配置 yii\filters\HttpCache::cacheControlHeader 属性发送相应的头信息。
默认发送以下头:

Cache-Control: public, max-age=3600