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

三个字节的不可见字符!

时间: 2024-08-30 07:25:48

04mvc框架原理(8days)05的相关文章

04mvc框架原理(8days)01

面向对象关键字: class public,protected,private static const ? self,parent,static ? extends implements abstract interface final ? new clone ? $this ? ? 介绍项目开发 安装ecshop 解压压缩包后,获取其中upload子目录的所有文件,将其放置到可以被浏览器请求到某个目录(建议改名) 请求,index.php即可! 会自动跳转到安装页面(或者可以请求instal

04mvc框架原理(8days)03

页面跳转 header('Location: url'); 优势:在于立即跳转! 劣势:没有办法在跳转前给出提示! ? header功能是,发送响应头信息!相应头信息,是相应信息的一部分!通知浏览器应该做哪些事情的部分!但是要求,相应头信息,要先于响应主体(相应信息的其他部分)先被发送到浏览器! 因此,无论如何也是看不到echo的提示: 甚至,上面的代码会出现语法错误! 默认在于php有个叫:输出缓冲功能,会默认缓存所有的主体输出! ? 因此,编程上建议在使用header函数时,前面不应该有任何

04mvc框架原理(8days)02

框架 实现业务逻辑的基础代码,主要包括: 一:项目的架构模式(MVC) 二:常用的公共操作代码(MySQLDB,文件上传,图片处理,分页,字符串处理,session处理) 应该将以上的代码总结出来,下次可以直接使用! ? ? 几个项目的概念 ? 项目功能: 前台:负责展示项目具体功能的平台称之为前台! 后台:负责功能管理,数据管理的平台称之为后台! ? 工作内容: 程序:负责网站的业务逻辑主体功能实现的工作,程序!(PHP,SQL,JS) 美工:负责设计页面样式!(HTML,CSS,JS) ?

04mvc框架原理(8days)04

session操作 session详细使用 session的开启 session_start(); ? 自动开启 session可以自动开启!在当前的脚本执行之前,就完成开启! 通过php的配置文件,修改即可! ? 注意,在session已经开启的情况下再开启,则会触发错误! ? 因此典型的开启session是如下的代码: ? session_start()前的输出问题 session_start前也不应该有任何的输出,因为可能会使用到响应头信息(类似于header函数) ? ? $_SESSI

04mvc框架原理(8days)06

增加验证码的工具类 工具类 framework/tool/CaptchaTool.class.php 所有关于验证码的工作:生成,验证 ? 妥善管理所使用到背景图片: 放置在 工具目录: ? ? 展示使用验证码 增加一个控制器动作 实例化该工具类,从而完成展示验证码功能! app/controller/back/AdminController.class.php captchaAction() ? 表单页面的img标签请求该动作 app/view/back/login.html ? 将该动作也设

我与小娜(05):变换时空,重返北京

我与小娜(05):变换时空,重返北京?       2月5日早上6点,我用手拍了一下“小口袋”,说:出来吧!小娜从袋子里面把紧闭的袋口打开,探出头来,看了我一眼,然后对着说:你是谁啊?       为什么小娜不认识我了?我是谁?……我也不记得自己是谁了?头脑里面一片空白,……突然之间,我明白了一个道理:物理因果关系是不能颠倒的,即便借助量子纠缠超距作用,也不能远距离传递传统信息,难怪小娜不认识我了,因为我的帐号没有传递给她.我自己也是头脑空白,一片无知,……       所幸的是,在小娜容身的“

修炼爱情05

今天你的心情好些了,感觉没有了前几天的烦躁,生活各种事情参杂在一起的时候,人就是容易迷惑和忧郁,但是人是很强大的动物,我们不是慢慢的就走出忧郁,回归到现实的生活嘛?好好和爱人的人一起渡过难关,每一个在乎你的人都会与你同在,不管任何形式,任何方式,心总在一起,慢慢的都会好起来的,兰,今天我加班了,听到你的消息很安心,脑子终于好使了,Your are my angle,I love you. 修炼爱情05,布布扣,bubuko.com

Openwrt15.05网关后pptp外拨失败的解决办法

路由器升级openwrt chaos_calmer 15.05版后发现NAT后面的客户端外拨pptp vpn服务器失败,经google后得知,在14.07版本中默认安装的又一个叫做 kmod-ipt-nathelper-extra 的软件包,该软件包实现了pptp客户端穿透openwrt网关的功能,而到了15.05版后,该软件包不在默认安装,且该软件包已改名为  kmod-nf-nathelper-extra,重新安装回来就行了: opkg install kmod-nf-nathelper-e

1098: 零起点学算法05——除法算术题

1098: 零起点学算法05--除法算术题 Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitted: 2346  Accepted: 1932[Submit][Status][Web Board] Description 乘法会了,除法也一样的.不要跟我说不会哦. Input 没有输入 Output 输出12除以2的值,计算让计算机去做哦 Sample Output 6 Source 零起点学算法 1 #i