标签:控制 前台 roo sys end 系统 大量 传值 存在
PHP自定义框架部分知识点小结(一)
网络上有大量优秀的MVC框架可供使用,但自定义框架并不是为了开发一个全面的、终极的MVC框架解决方案,而是将它看作是一个很好的从内部学习PHP的机会,在此过程中,将会学习面向对象编程和MVC设计模式,并学习到开发中的一些注意事项。
Web MVC的流程体现如下图:
一个典型的Web MVC流程:
首先创建好相应的目录文件
假设项目名为XFrame,XFrame目录下的文件一次为:
APP 应用目录
---Home 存放前台文件
----Controller 存放前台的控制器
----Model 存放前台的模型
----View 存放用于展示数据的视图文件
---Admin 存放后台文件
----Controller 存放后台的控制器
----Model 存放后台的模型
----View 存放用于展示数据的视图文件
Core 存放核心文件
Config 存放配置文件
Public 存放公共文件
Vendor 存放扩展文件
index.php 入口文件
为了让自己在搭建框架时,能够准确找到相应目录下的文件,一开始就把目录设置好是非常有必要的。
1、设置好目录后,第一件事就是先在创建好的入口文件(index.php)中设置以下代码:
1 <?php 2 3 //增加一个入口常量,用于判断是否有权限直接进入其它文件 4 define(‘ACCESS‘, TRUE); 5 6 //加载初始化类 7 include ‘Core/App.class.php‘; 8 9 //进入到初始化类 10 //Core\App::run(); 11 \Core\App::run(); //由于采用命名空间,因此访问类的时候必须带上空间
2-1、从入口文件的代码可以看出,下一步需要创建的文件是在Core目录下的App.class.php文件。
1 <?php 2 3 //使用命名空间 4 namespace Core; 5 6 //权限判断:以后的文件都会用到入口文件所定义的常量‘ACCESS’来判断 7 if (!defined(‘ACCESS‘)) { 8 //非法访问权限 9 header(‘Location:/index.php‘); 10 die; 11 } 12 13 class App{ 14 //该方法就是入口文件所调用的方法,用于初始化 15 public static function run(){ 16 echo ‘success‘; 17 }
2-2、当在浏览器能看到输出相应的文字,证明能成功调用该方法,接着就要在App类中定义其它初始化的方法,用来设置字符集、定义目录常量、设置系统错误控制、解释URL、分发控制器。
设置字符集:
//设置字符集 private static function setCharset(){ header("content-type:text/html;charset=utf-8"); }
定义目录常量:
//定义目录常量 private static function setDirConst(){ //设置根目录常量ROOT_DIR define(‘ROOT_DIR‘, str_replace(‘Core‘,‘‘,str_replace(‘\\‘,‘/‘,__DIR__))); //定义的目录常量,建议都加上‘/’ define(‘CORE_DIR‘, ROOT_DIR.‘Core/‘); define(‘CONFIG_DIR‘, ROOT_DIR.‘Config/‘); define(‘VENDOR_DIR‘, ROOT_DIR.‘Vendor/‘); define(‘APP_DIR‘, ROOT_DIR.‘App/‘); define(‘PUBLIC_DIR‘, ROOT_DIR.‘Public/‘); }
设置错误控制:
//设定错误控制 private static function setSysError(){ //两种级别:级别显示,是否显示 @ini_set(‘error_reporting‘, E_ALL); @ini_set(‘display_errors‘, 1); }
解释URL($_REQUEST能够获取到所有传值的数据,因此当无法确定是POST还是GET时,用$_REQUEST):
//解释URL private static function iniURL(){ //获取三个数据:平台,控制器,方法 $plat = isset($_REQUEST[‘p‘]) ? trim($_REQUEST[‘p‘]) : ‘Home‘; $module = isset($_REQUEST[‘c‘]) ? ucfirst(strtolower($_REQUEST[‘c‘])) : ‘Index‘; $action = isset($_REQUEST[‘a‘]) ? $_REQUEST[‘a‘] : ‘index‘; //这里用定义常量来保存在URL获取到的平台、控制器、方法,因为常量能够供全局使用。 define(‘PLAT‘, $plat); //Admin或者Home define(‘CONTROLLER‘, $module);//指定控制器或者Index define(‘ACTION‘, $action);//指定方法或者index }
分发控制器,并调用方法:
//分发控制器 private static function iniDispatch(){ //拿到对应的平台,控制器和方法 $module = CONTROLLER . ‘Controller‘; $action = ACTION; //实例化对应的控制器,然后调用方法 include_once APP_DIR.PLAT.‘/Controller/‘ . CONTROLLER . ‘Controller.class.php‘; //当前是Core空间,需要转到对应的控制器空间,空间命名规则:平台+对应属性。 //new \Home\Controller\IndexController(); $module = ‘\\‘ . PLAT . ‘\\Controller\\‘ . $module;//构建一个完全限定名称访问的路径 $module = new $module; //var_dump($module); $module->$action(); //可变方法 }
最后,在一开始的入口方法run()中调用上面所定义的方法,以达到当入口文件调用方法时,能够让App.class.php初始化相应的设置:
public static function run(){ self::setCharset();//设置字符集 self::setDirConst();//定义目录常量 self::setSysError();//设置错误控制 self::iniURL();//解析URL self::iniDispatch();//分发控制器和调用方法 }
当上述步骤完成后,即可在APP目录下的Home目录下的Controller中创建IndexController.class.php
标签:控制 前台 roo sys end 系统 大量 传值 存在
原文地址:http://www.cnblogs.com/xieyaojin/p/6209660.html