04mvc框架原理(8days)05

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了04mvc框架原理(8days)05相关的知识,希望对你有一定的参考价值。

后台的登陆判断

后台几乎所有的动作,在执行前都需要判断是否登录!

应该在所有的后台动作之前都判断呢?

所有的后台控制器在执行时,都需要判断!

?

典型的:

增加每个平台的基础控制器!

写平台下的公共代码!

技术分享

?

实现:

在后台中:

app/controller/back/

增加:

BackPlatformController.class.php

技术分享

所有的后台都继承自:

技术分享

技术分享

技术分享

?

?

?

将登陆验证的功能,提取到公共位置

技术分享

?

使其在每次,得到控制器类对象时,完成对登陆的验证!

在构造方法中:

在后台的公共控制器的构造方法中:

技术分享

?

?

注意,上面的判断:

后台几乎所有的控制器动作需要验证,有不需要的!

与登录相关的都应该不需要!

因此,应该将该判断出来?

技术分享

?

技术分享

?

?

session入库工具类

工具类:专门负责某个功能的类!

属于整个项目,应该在Framework中出现!

?

增加一个独立的目录专门管理工具类:

framework/tool/工具类目录

技术分享

?

需要为工具类,实现项目的自动加载:

修改

framework/Framework.class.php

itcast_autoload()

增加一个规律,凡是以Tool结尾的都是工具类:

技术分享

还需要一个目录常量配合:

技术分享

?

实现

利用一个对象的六个方法充当session入库的六个处理器!

Framework/tool/SessionDBTool.class.php

?

要求,在实例化该工具类对象时,就完成session方法的设置,并开启session:

构造方法:

技术分享

?

完成六个处理方法:

项目中利mysqldb类的对象完成:

要求在open时,初始化一个db对象!

技术分享

?

利用db完成操作即可!

?

?

?

项目中增加一个it_session表

技术分享

?

?

项目中使用

去掉所有独立的session_start();

?

在后台公共地方,增加初始化session入库的代码!

app/controller/back/BackPlatformController.class.php

技术分享

?

?

技术分享

?

技术分享

?

?

tip:

php的配置关于session的

session.save_handler session的处理器

技术分享

?

可以改变session的存储方式!

默认是files 表示以files的形式存储!

?

(memcache)

?

一般如果用户完成,最好设置成:

user表示用户自定义!

建议在当前脚本内修改:

利用函数ini_set()来设置配置值

ini_set(‘配置项‘, ‘新值‘);

只在设置后到脚本结束有效!

?

技术分享

?

?

分类的管理

分类的删除

Controller

在分类控制器增加一个方法用于处理删除动作

app/controller/back/CategoryController.class.php

技术分享

?

?

Model

为分类模型增加一个delById方法

app/model/CategoryModel.class.php

技术分享

?

需要在删除前,增加对当前分类是否是末级(叶子)分类的判断,才能完成删除!

技术分享

View

没有视图层参与!

?

其他

在分类列表的每个分类后增加一个可以删除该分类的连接:

列表视图

app/view/back/category_list.html

技术分享

?

可以增加在点击连接时,提示是否真的删除?

app/view/back/category_list.html

技术分享

?

测试:

?

?

处理模型中,生成的错误

为模型增加一个保存错误信息的属性,再发生错误时,记录错误信息,到属性上!

技术分享

?

使用该模型对象的该属性即可完成错误信息的展示:

技术分享

?

?

分类的添加

添加表单

控制器controller

分类管理控制器增加一个add方法

app/controller/back/CategoryController.class.php

先读取所有可能的分类,下拉列表中展示

技术分享

模型Model

需要,但是已经写好了!

视图View

增加一个 分类添加视图

app/view/back/category_add.html

技术分享

?

遍历所有的分类列表:

技术分享

?

其他

在分类的列表页,增加一个链接访问到分类的增加!

app/view/back/category_list.html

技术分享

处理添加数据

?

控制器

后台分类管理模块控制器的InsertAction

技术分享

模型

增加insertCat的模型方法

app/model/CategoryModel.class.php

技术分享

?

增加的逻辑:

  1. 分类名称不能为空字符!
  2. 同一分类下的分类,不能同名!

技术分享

?

视图

不需要!

?

?

分类的编辑

编辑表单

控制器

app/controller/back/CategoryController.class.php

增加一个editAction

技术分享

?

模型

增加一个getById的分类模型的方法即可

app/model/CategoryModel.class.php

技术分享

?

?

视图

增加一个编辑模板

app/view/back/category_edit.html

技术分享

?

展示原始数组

技术分享

需要判断哪个分类的option上增加selected属性!

技术分享

技术分享

?

当前正在编辑的分类的id应该作为隐藏域传递到下个动作!

技术分享

?

其他

在分类列表页,增加编辑的链接:

app/view/back/category_list.html

技术分享

?

编辑数据处理

?

控制器、

app/controller/back/CategoryController.class.php

技术分享

模型

增加updateCat方法

app/model/CategroryModel.class.php

技术分享

?

更新的parent_id不能是自己或者自己的后代分类!

需要自己与后代的所有ID,再判断是在其中!

技术分享

?

注意此时需要为getTreeList()增加一个参数:

技术分享

视图

没有!

?

?

?

PHP处理图片

?

技术分享

?

GD的操作!

?

GD处理图片的典型步骤

场景:500*300绿色的图片! green.png

创建GD画布,gd画布资源

利用gd库的函数完成

//新建,直接建立一个画布资源

imagecreate 创建调色板图片

imagecreatetruecolor 真彩色图片

画布资源 = imagecreatetruecolor(宽,高)

技术分享

?

imagecreatefromXXXX XXX表示格式:

//打开,利用已有的图片创建画布资源!

imagecreatefromjpeg

imagecreatefrompng,从png格式创建画布

imagecreatefromgif

?

操作画布

利用一个个的工具函数,完成画布的处理的!

选择颜色,分配颜色

如果需要使用某个颜色,在画布上操作,一定要先将颜色分配到画布上!

利用函数:

imagecolorallocate(画布,颜色).向画布上分配颜色

颜色是RGB,红绿蓝,颜色需要三个参数,分别表示R,G,B的值

颜色标识= imagecolorallocate(画布,R,G,B)

每个颜色值,是一个整型!

0-255十进制

0x0 - 0xff 十六进制

技术分享

填充画布

利用函数:imagefill完成填充

imagefill(画布,填充位置X, 填充位置Y,颜色);

将像素周围的连续的并且颜色相同的区域可以完成填充!

填充位置使用填充点的坐标表示:

图片位置的原点为 左上角!坐标为(0,0) 因此右下角的坐标是?(width-1,height-1 499,299)

技术分享

?

?

将画布导出成图片

imageXXXX,XXX表示格式

imagejpeg

imagegif 导出成gif格式

imagepng

一个画布可以导出多次,而且是任意格式!

?

imagepng(画布,保存文件);

技术分享

?

销毁资源

imagedestroy();

技术分享

?

验证码

session技术。

php处理图片的技术。

?

仿照:

  1. 有已存在的背景图几张
  2. 随机得到某张!
  3. 白色边框
  4. 随机文字(大写+数字,黑白随机)

技术分享

?

得到预定义的背景图片:

技术分享

?

确定随机背景图片

技术分享

?

基于该背景图片,创建画布!

技术分享

?

绘制边框

画一个不填充的矩形!

利用函数

imagerectangle()完成

?

imagerectangle(画布,左上角X,左上角Y,右下角X,右下角Y,笔触颜色);

利用左上角,与右下角的坐标确定矩形范围!

?

?

写验证码

?

技术分享

?

写到 画布上

利用函数

imagestring()

imagestring(画布,字体大小,位置X,Y,字符串,颜色);

其中imagestring典型的是使用内置字体!(不支持中文)。字体大小1-5.5最大!

技术分享

?

导出,保存

imagejpeg();

技术分享

?

?

将验证码展示到页面上

?

典型的:

使用一个php文件,直接输一个图片内容!

直接输出的请求的浏览器端

imagejpeg(画布,保存文件)

如果没有第二个参数,则是直接输出!

技术分享

此时应该在输出图片内容到浏览器之前,告知浏览器,当前内容是二进制的图片内容!

header();//

header(‘Content-Type: text/html; charset=utf-8‘);//告知浏览器发送的内容以utf8编码形式的文件html数据!

技术分享

技术分享

?

此时,使用 img标签的src属性,请求一个生成图片的php程序即可显示图片!

技术分享

?

?

tip:开启gd库!

?

技术分享

?

tip:挑错:

如果向浏览器发送的是图片,则如果有错误浏览器显示:

技术分享

技术分享

?

直接请求生成图片的url:108.php。

此时,将header(‘Content-Type:image/jpeg‘)先注释!

技术分享

?

tip:

典型的错误,一个生成图片的php脚本内的任何输出,都会当作图片内容去看!

技术分享

在输出图片文件中,不能有任何其他输出!

?

包括utf8文件的bom(标志,签名)

技术分享

utf-8+

utf-8+BOM

三个字节的不可见字符!

以上是关于04mvc框架原理(8days)05的主要内容,如果未能解决你的问题,请参考以下文章

04mvc框架原理(8days)04

04mvc框架原理(8days)01

04mvc框架原理(8days)06

04mvc框架原理(8days)03

现在mvc的后台管理系统一般用啥ui框架

Spring MVC:原理与使用