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
?
增加的逻辑:
- 分类名称不能为空字符!
- 同一分类下的分类,不能同名!
?
视图
不需要!
?
?
分类的编辑
编辑表单
控制器
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处理图片的技术。
?
仿照:
- 有已存在的背景图几张
- 随机得到某张!
- 白色边框
- 随机文字(大写+数字,黑白随机)
?
得到预定义的背景图片:
?
确定随机背景图片
?
基于该背景图片,创建画布!
?
绘制边框
画一个不填充的矩形!
利用函数
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的主要内容,如果未能解决你的问题,请参考以下文章