04mvc框架原理(8days)03

页面跳转

header(‘Location: url‘);

优势:在于立即跳转!

劣势:没有办法在跳转前给出提示!

?

header功能是,发送响应头信息!相应头信息,是相应信息的一部分!通知浏览器应该做哪些事情的部分!但是要求,相应头信息,要先于响应主体(相应信息的其他部分)先被发送到浏览器!

因此,无论如何也是看不到echo的提示:

甚至,上面的代码会出现语法错误!

默认在于php有个叫:输出缓冲功能,会默认缓存所有的主体输出!

?

因此,编程上建议在使用header函数时,前面不应该有任何的输出!包含html输出和phpecho输出!

?

location.href=‘url‘,javascript

提示是,样式不易控!(可以用弹出层)

?

但是,js的支持,需要浏览器支持才可以!

?

meta:Refresh

refresh 是刷新的意思,可以提供一个秒数,刷新的间隔!

同时,支持设置刷新的目标url !

?

有需要当前页面执行结束后才会刷新,因此容易给出提示,包括提示的样式!

?

因此项目中典型的提示跳转都由 refresh完成!

?

?

项目中的跳转实现

?

基础控制器

跳转功能典型的是一个项目流程控制,应该属于Controller控制器!

所有的控制器都可能使用到跳转方法!

问:应该写在哪里?

答:一个控制器公共的地方!

?

参考模型的模式:

增加一个基类控制器,将所有控制器公共操作都放在其中,所有的实例控制器都继承自公共基础控制器类:

?

framework/Controller.class.php

?

控制器继承自,基础控制器:

?

同时,完善 自动加载方法,可以达到自动载入基础控制器类的目的:

index.php:

完善跳转方法,jump()

framework/Controller.class.php

jump()

?

?

?

格外注意:

跳转的代码执行结束后,脚本是没有停止的!

因此,跳转的代码后边强制脚本停止!

?

?

?

?

项目公共类

用于完成成项目的整体初始化工作!

原本在index.php入口文件,完成的工作,放入到一个项目的框架公共类中!

?

在 框架目录增加一个类文件:

Framework.class.php

index.php内的每个功能映射 一个Framework类中的某个方法!

?

为了练习静态成员!

framework类中所有的方法定义成静态的!

?

?

一个总的方法,去调用上面的各个方法:

?

入口文件,直接调用run即可完成项目的运行:

index.php

?

?

自动加载方法的处理

?

将自动加载的函数,也变成Framework类的一个方法:

此时的问题是php不知道调用该方法,只会调用__autoload的函数,但是没有!

应该告知 php,在需要自动加载时,调用我们定义的方法!

注册自动加载方法

利用 系统函数:

spl_autoload_registser()

?

如果需要注册的是一个函数:直接提供函数名即可

?

如果是方法的话:需要给出类或者对象(是否是静态) 和 方法名!

此时需要一个数组,使用两个元素,分别表示

array(类名或对象,方法名);

?

在初始化项目是,也需要注册自动加载方法:

?

?

配置文件系统

  1. 增加一个文件,保存配置信息
  2. 项目运行时,将配置文件载入,就可以使用配置信息!

?

增加配置文件

在app目录增加一个config子目录,用于管理配置文件:

在配置文件目录,增加一个app.config.php文件,管理相应的配置文件信息

?

设计配置数据的格式:

将配置分组:

最终是一个二维数组!

?

注意,增加return

用于,在载入该文件时可以返回内部的数据!

?

?

载入配置文件

增加一个框架级别的基础操作,载入配置信息!

在framework/Framework.class.php

增一个方法,在run方法中执行即可!

注意:1需要使用一个路径常量,管理配置文件目录!2,需要一个数据变量接收配置数据

考虑获得数据的变量:

保证保存配置信息的变量的全局性!使用$GLOBALS

?

使用配置信息

在基础模型实例化MysQLDB类时需要使用

framework/Model.class.php

?

?

增加后台首页

后台整体首页

控制器

增加一个后台的首页模块控制器

app/controller/back/IndexController.class.php

indexAction()

展示后台模板即可!

是一个框架集frameset布局!

?

?

模型

暂时不需要模型

?

视图

增加一个后台首页模板

app/view/back/index.html

?

注意,此时是一个框架集布局:

结构如下:

下(左中右)

?

其他

在登录验证用户合法后,跳转到后台首页!

app/controller/back/AdminController.class.php

signinAction();


各个部分

除了后台整体页面之外,还需要

top:

menu,

drag

main

以上四个功能才能形成一个完整的后台首页

?

问题,如何处理以上四个功能?

每个功能都应该是一个项目的完整的功能,应该mvc三部分组成!

因此,所有的请求地址:都应该是请求当前项目的一个控制器动作才可以!

?

后台首页主体模板:

app/view/ back/index.html

?

?

需要项目中的4个动作完成:

app/controller/back/IndexController.class.php

?

完善以上四个动作:

载入不同的模板即可!

提供四个模板:

app/view/back/下:

?

?

?

?

后台的登陆验证

?

判断是否经登陆,!

?

问:这个判断条件(依据)从哪里来?

答:应该登陆成功后,为浏览器用户设置登陆凭证,在请求后台首页时进行判断!

?

问:使用什么来作为登陆凭证?

答:

变量可否?不行,已经消失!找一个不会消失的!

url传递是否可以?不行,凭证可以轻易仿照!找一个可以向向下传递,并且不能被轻易模拟的!

数据不向下次请求传递,就获得不了!

服务器本身是不存在在多次请求间传递的数据。抛出数据库,文件中的持久数据!

文件可否?不行,数据永远存在,对所有的浏览器都好用!

?

因此总结:

既能够在多次请求间向下传递,还要区分浏览器,最好不能被(用户看到)轻易模拟!

由于web服务器都是基于http协议,http协议是无状态的,导致任何请求之间没有任何关系间可言。导致php所有资源在脚本结束都消失!

?

解决该问题的本质方法,需要浏览器参与!

?

此时,可以使用 浏览器上的cookie技术!

?

cookie技术

浏览器的技术,可以在浏览器上保存数据的一门技术!cookie就是指的是浏览器上保存的数据!

PHP支持cookie技术!php可以向浏览器发出指令,从而将数据保存到浏览器上!

?

浏览器负责保存数据,而php负责控制浏览器保存那些数据!

(php在是使用浏览器上cookie技术)

?

?

保存在浏览器上的cookie数据,可以在浏览器每次项服务器请求时,都可以携带该数据,向服务器发出请求,此时服务器上的脚本就可以获得该数据!

?

基本使用

设置cookie变量,增,改,删

利用内部函数 setcookie完成

setcookie(名字,值)

取得cookie变量,读

使用预定义数组变量:$_COOKIE

该变量内保存所有从浏览器请求时所携带的cookie数据!

每个元素就是一个cookie变量数据!下标是名字,值,就是值!

?

?

基本原理

利用firebug的网络选项卡:

设置时,做了什么?

在响应时,服务器发送了一条指令,在浏览器上增加一个cookie变量!

浏览器接到该指令后,在浏览器上增加了一个cookie数据!

?

?

获取时,做了什么?

浏览器会将当前站点的所有的cookie在请求时都携带到服务器上!

php会自动获得到浏览器携带的cookie,形成$_COOKIE数组,用户脚本使用!

?

?

高级使用

  1. cookie数据只能是字符串数据!

?

  1. setcookie函数,可以完成增,修改,删除!

不存在,则增加,存在则修改!

删除,可以采用将值,置空的形式!

?

  1. cookie变量的失效期

cookie数据存在有效期的概念:

默认,临时cookie。会保存到浏览器关闭!

同时,支持,增加setcookie的第三个参数,来修改cookie变量的有效期。有效期的表示方式,是一个时间戳,表示到哪个时间点,失效!

php可以通过 time()函数,获得当前的时间戳,time()增加增量的形式延长cookie时间!

此时,服务器会向浏览器发出如下指令:

网络上表示时间,都是用 格林威治平时!没有时区概念的那个时间!GMT

浏览器知道cookie变量的有效期!

?

常用的操作:

?

  1. cookie存在有效路径的概念

cookie变量是只在当前目录,及其后代目录才会生效!

?

test/下设置

test/sub/下可以访问

反过来:

?

那是由于该cookie:

?

可以更改cookie数据的有效路径:

通过setcookie的第四个参数做修改:

/表示站点根目录有效!整站有效!

?

?

5,cookie子域名的概念

cookie是严格区分域名的。

?

支持在子域名之间是可以共享的:

利用第五个参数设置

?

?

有效期,有效路径,有效子域名!

6,$_COOKIE是捕获不了当前脚本所设置的cookie变量的!

?

$_COOKIE是,浏览器请求时所携带的所有cookie!

当前设置的在下次使用请求才好用!

?

session技术,会话技术

场景:

cookie的问题

由于是数据本身是在浏览器端:

数据的安全性问题!

数据总要在请求时携带!

?

怎么解决,注意保持在浏览器的多次请求间共享数据!

?

将数据放在服务器端,同时是数据区分浏览器,在浏览器的多次请求间共享数据!

?

在服务器上,为来访的每台浏览器增加一个数据空间,然后为这些数据空间分配不同唯一的标识!为每个浏览器分配一个唯一的标识,该标志应该服务器端数据库空间的标识应该一一对应

要求,浏览器每次请求时携带标识,此时服务器可以获得标识,利用标识确定数据空间,但却请求的所有的数据处理,都在当前的确定的空间内完成!

?

将服务器分配给浏览器的唯一标识存在浏览器的cookie内,可以保证浏览器每次来时都携带!

服务器为每一个新浏览器访问(没有确定标识的浏览器),确定 标识,和在服务器上生成一个唯一的数据空间!

?

?

基本使用

直接操作$_SESSION数组,就可以完成session数据的存,取!

每个session数据,就对应$_SESSION内的一个元素!对元素操作,就是对session数据做操作!

?

但是,session技术,包括生产session标识,开辟session数据空间,为浏览器分配session标识等等,都需要PHP的session机制支持!

因此,需要先开启session的支持,才能操作$_SESSION变量,从而去操作session数据!

?

开启:

session_start();

?

操作:

$_SESSION;

?

先开启后操作:

?

更新和删除:

?

?

基本原理

?

浏览器端cookie中保存的sessionID:

?

当前浏览器第一次对服务器发出请求时,服务器不能确定浏览器的标识

会重新生成一个唯一标识,以cookie的形式保存到浏览器端!

其中默认的cookie变量名为:PHPSESSID。

该cookie标量,也被称之为 sessionID!

?

当浏览器拥有了sessionid这个cookie变量后,接下来的请求都会携带该ID发出请求:


?

服务器的端的是session数据空间

默认情况下,php,会将保存session数据的空间,生成一个文件来完成!通过文件的名称来区分属于哪个ID的!

默认的被保存在服务器操作系统的临时目录内:

?

?

大概的流程:

?

?

?

测试:

使用session来完成登陆标识验证:

?

时间: 2024-10-13 06:37:53

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

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)05

后台的登陆判断 后台几乎所有的动作,在执行前都需要判断是否登录! 应该在所有的后台动作之前都判断呢? 所有的后台控制器在执行时,都需要判断! ? 典型的: 增加每个平台的基础控制器! 写平台下的公共代码! ? 实现: 在后台中: app/controller/back/ 增加: BackPlatformController.class.php 所有的后台都继承自: ? ? ? 将登陆验证的功能,提取到公共位置 ? 使其在每次,得到控制器类对象时,完成对登陆的验证! 在构造方法中: 在后台的公共控

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 ? 将该动作也设

蚂蚁课堂(每特学院)-2期

0001-蚂蚁课堂(每特学院)-2期-多线程快速入门 第01节.线程与进程的区别 第02节.为什么要用到多线程 第03节.多线程应用场景 第04节.使用继承方式创建线程 第05节.使用Runnable接口方式创建线程 第06节.使用匿名内部类方式创建线程 第07节.多线程常用api 第08节.守护线程与非守护线程 第09节.多线程几种状态 第10节.join方法介绍 第11节.t1.t2.t3执行顺序面试题讲解 第12节.使用多线程分批处理信息 资料+源码.rar 0002-蚂蚁课堂(每特学院)

Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结

转自:http://blog.csdn.net/zhongwen7710/article/details/39577431 本blog的内容包含: 第一部分:Hbase框架原理理解 第二部分:Hbase调用MapReduce函数使用理解 第三部分:Hbase调用Java API使用理解 第四部分:Hbase Shell操作 第五部分:Hbase建表.读写操作方式性能优化总结 第一部分:Hbase框架原理理解 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google

03 php 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换,算术运算,比较运算

03 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换, 算术运算,比较运算,逻辑运算,短路现象, 三目运算符,字符型运算: 数据类型 整体划分 标量类型: int, float, string, bool 复合类型: array,     object 特殊类型: null,     resouce 整数类型int, integer 3种整数表示法 十进制写法:123: $n1 = 123; 八进制写法: 0123 $n2 = 0123; 十六进制写法: 0x123 $n3

前端开发神器WebStorm--Grunt 搭建环境(03)

通过上一篇前端开发神器WebStorm--自动化工作流(前言),相信大家都Grunt自动化工具有了初步了解. 接下来我就以WROC3000 web为原型,演示一下如何使用Grunt工具提高工作效率,最大程度压缩代码. 1.首先安装node环境 进入官网 下载安装.(记住安装目录) 检测安装成功方法:打开CMD窗口,输入 node --version 会打印出安装的版本号,说明已经安装成功. 2.安装 Grunt 客户端 在CMD 窗口中,切换到node安装盘符,会自动切换到nodejs安装目录.