封装application类
<?php
//判断用户是否是通过入口文件访问
if(!defined('ACCESS')){
echo '非法请求';
die;
}
//封装初始化类
class Application {
//设置字符编码
private static function setCharset() {
header('Content-type:text/html;charset=utf-8');
}
//设置系统常量
private static function setDir() {
define('ROOT_DIR',str_replace('\\', '/', dirname(__DIR__)));
define('CORE_DIR',ROOT_DIR.'/Core');
define('ACTION_DIR',ROOT_DIR.'/Action');
define('MODEL_DIR',ROOT_DIR.'/Model');
define('VIEW_DIR',ROOT_DIR.'/View');
define('Config_DIR',ROOT_DIR.'/Config');
define('PUBLIC_DIR',ROOT_DIR.'/Public');
}
//设置错误信息
private static function setErrors() {
ini_set('display_errors', 1);
error_reporting(E_ALL);
}
//初始化配置信息
private static function setConfig() {
$GLOBALS['config'] = include Config_DIR.'/config.php';
}
//加载Core核心文件
public static function loadCore($class) {
if(is_file(CORE_DIR."/$class.class.php")) {
include CORE_DIR."/$class.class.php";
}
}
//加载控制器文件
public static function loadAction($class) {
if(is_file(ACTION_DIR."/$class.class.php")) {
include ACTION_DIR."/$class.class.php";
}
}
//加载模型文件
public static function loadModel($class) {
if(is_file(MODEL_DIR."/$class.class.php")) {
include_once MODEL_DIR."/$class.class.php";
}
}
//自动加载机制
private static function setAutoLoad() {
//通过以下方式可以将loadCore,loadAction,loadModel追加到系统__autoload函数栈中
//当系统初始化对象时,系统会自动到以下三个函数中寻找,但是有顺序要求,先注册先使用,如在当
//前文件中已找到,其将不会继续向下寻找
spl_autoload_register(array('Application','loadCore'));
spl_autoload_register(array('Application','loadAction'));
spl_autoload_register(array('Application','loadModel'));
}
//设置session
private static function setSession() {
@session_start();
}
//设置url
private static function setUrl() {
//默认显示Index控制器下的index方法
$module = isset($_REQUEST['m'])?$_REQUEST['m']:'Index';
$action = isset($_REQUEST['a'])?$_REQUEST['a']:'index';
//把接收到的所有参数转化为小写
$module = strtolower($module);
$action = strtolower($action);
//由于命名习惯问题,我们需要将模块参数的首字母转化为大写
$module = ucfirst($module);
define('MODULE',$module);
define('ACTION',$action);
}
//设置权限
private static function setPrivilege() {
//如果是提供登录表单和登录验证方法,不需要验证用户是否已登录,其他均需用户登录后才可以进行操作
if(!(MODULE=='Privilege' && (ACTION=='login' || ACTION=='sigin' || ACTION=='captcha'))) {
$_SESSION['user'] = 1;
if(!isset($_SESSION['user'])) {
header('Location:index.php');
}
}
}
//设置分发
private static function setDispatch() {
$module = MODULE.'Action';
$action = ACTION;
//创建对象
$module = new $module();
$module->$action();
}
//定义初始化方法
public static function run() {
//1)初始化字符集
self::setCharset();
//2)初始化系统路径常量
self::setDir();
//3 )初始化错误配置
self::setErrors();
//4)初始化配置信息
self::setConfig();
//5)自动加载
self::setAutoLoad();
//6)开启session
self::setSession();
//7)url初始化
self::setUrl();
//8)权限验证
self::setPrivilege();
//9)分发
self::setDispatch();
}
}
?>
封装application类的更多相关文章
- 微信公众号开发系列-Http请求封装基类
HttpHelper请求封装基类,支持get请求和POS请求,方便微信开发接口交互,为后面接口交互做准备. 1.HttpHelper帮助基类 [csharp] view plaincopy using ...
- Http请求封装基类HttpHelper.cs
HttpHelper请求封装基类,支持get请求和POS请求http接口交互,为后面接口交互做准备. 1.HttpHelper帮助基类 using System; using System.Colle ...
- [Android] Android 使用 Greendao 操作 db sqlite(2)-- 封装DaoUtils类
继续接上文: Android 使用 Greendao 操作 db sqlite(1)-- 直接在MainActivity中调用 布局文件同上文一致,这里就不贴了. 一.封装DaoUtils类 User ...
- PDO 增删改查封装的类
Selecting Data 你在mysql_*中是这样做的 <?php $result = mysql_query('SELECT * from table') or die(mysql_er ...
- PHPEXCEL在thinkphp中封装成类使用
PHPEXCEL在thinkphp中封装成类使用 标签: phpexcel导出导入thinkphp -- : 435人阅读 评论() 收藏 举报 分类: php() 版权声明:本文为博主原创文章,未经 ...
- 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式
适用于app.config与web.config的ConfigUtil读写工具类 之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ...
- 基于小程序请求接口 wx.request 封装的类 axios 请求
基于小程序请求接口 wx.request 封装的类 axios 请求 Introduction wx.request 的配置.axios 的调用方式 源码戳我 feature 支持 wx.reques ...
- python封装发送邮件类
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart i ...
- SpringMVC 自动封装枚举类的方法
springmvc默认无法自动封装枚举类,解决方法如下: 1.枚举类 public enum GoodsPromoteEnum { /** * 0 精品 */ fine("精品", ...
随机推荐
- ZooKeeper Recipes and Solutions 翻译
ZooKeeper 秘诀 与解决方案 A Guide to Creating Higher-level Constructs with ZooKeeper Out of the Box Applica ...
- C/C++ 获取汉字拼音
参考文章:http://blog.csdn.net/thenile/article/details/6318521 在参考文章的基础上,去掉了代码中C++特有的语法和数据类型,用纯C语言实现了获取汉字 ...
- CSS3新添加的选择器
---条件选择器:--- .ccc[cusid*= value] { backgroud-color:#0094ff; } //表示使用了class="ccc"元素自定义属性cus ...
- Linux最常用命令及快捷键整理
最近在学Linux系统命令,在阿里云买了一台linux服务器.为方便自己也方便他人,整理了Linux常用命令及快捷键. 用命令: 文件和目录: # cd /home ...
- [LeetCode] Combination Sum II (递归)
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
- Spark Programming--WordCount
首先在$SPARK_HOME主目录下建立一个test文件夹,里面放一些文件(注意文件全部内容都可被hadoop用户访问,否则运行会出现permission denied的错误) 打开pyspark: ...
- 数据库.mdf
对于.mdf文件和.ldf数据库文件, 首先打开SQL Server Management Studio Express,登陆上后,右键点击数据库,附加->选择目标文件就可以了.
- asp.net MVC中如何用Membership类和自定义的数据库进行登录验证
asp.net MVC 内置的membershipProvider可以实现用户登陆验证,但是它用的是自动创建的数据库,所以你想用本地数据库数据去验证,是通过不了的. 如果我们想用自己的数据库的话,可以 ...
- iOS 使用UIView的一种有效方法
在一个典型的MVC结构 中,Model部分负责保存目标数据,View部分主要负责实现数据的界面以及将数据显示出来,二者在Controller的操作下协同工作.在iOS应用中,View的实现主要由UIV ...
- Java学习——变量类型
Java有3类变量 局部变量 成员变量(实例变量) 类变量(静态变量) 局部变量 局部变量声明在方法.构造方法或者语句块中: 局部变量在方法.构造方法.或者语句块被执行的时候创建,当它们执行完成后,变 ...