`
mengdejun
  • 浏览: 408285 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ezmvc框架 软件架构 自己写mvc

    博客分类:
  • Php
阅读更多

    Index.php 小孟在线

<?php
	###########################################################################################
	#  EzMvc http://hi.baidu.com/mak0000
	#  小孟在线
 Mengdejun
	#  20100920
	###########################################################################################
	#引入加载器
	include_once 'Ez/Loader.php';
	#启动控制器派发工作
	#$application->run();
	$a=$application->run();
?>

    Ez/Loader.php

<?php
	include_once 'Loader/Cfl.php';
	include_once 'Loader/Funs.php';
	spl_autoload_extensions(FILE_EXTENSIONS);
	class Loader
	{
		public static $register_functions=array();
		public static function init()
		{
		}
		public static function autoload($array)
		{
			foreach($array as $key=>$value):
				if(is_array($value)):
					self::autoload($value);
				else:
					include_onceEx(ereg_replace("{l}",$key,LOADER_RULE));
					autoload_registerEx($value);
				endif;
			endforeach;
		}
		public static function register($function,$file=null)
		{
			if(!empty($file)&&file_exists($file)):include_onceEx($file);endif;
			if(function_exists($function)):autoload_registerEx($function);endif;
		}
		public static function destory()
		{
			self::$register_functions=spl_autoload_functions();
			foreach(self::$register_functions as $key=>$value):
				spl_autoload_unregister($value);
			endforeach;
		}
		public static function unRegister($fun)
		{
			spl_autoload_unregister($fun);
		}
	}
	Loader::init();
	#自动加载类注册器
	Loader::autoload($class_registers);
	#类总控制器全局实例
	global $application;
	$application=EzController::getInstance();
?>

   ez/loader/cfl.php

 

<?php
	######################################################################################
	#注:class_registers中注册的加载器会在启动时自动调用
	######################################################################################
	define("LOADER_DIR",dirname(__FILE__));#加载器目录
	define("ENABLE_SCAN_FILE",true);
	define("LOADER_RULE",LOADER_DIR."/{l}Loader.php");#加载器命名规范 {l}为占位符
	define("FILE_EXTENSIONS",".php,.inc,.php,.ez,.php3,.php4,.phpc");#加载器类文件扩展
	global $class_registers;#定义全局加载器
	$class_registers[]=array
	(
		"Core"=>"CoreRegister",#核心加载器
		"Help"=>"HelpRegister",#helper加载器
		"Actions"=>"WcRegister",#控制器加载器
		"Url"=>"UrlRegister",#URL解析器
		"Plugin"=>"PluginRegister",#插件加载器
		"Vendors"=>"VendorsRegister,SmartyRegister",#默认的模板加载器
		"EzDb"=>"EzDbRegister"
	);
	$class_registers[]=array("Vendors"=>"XingCoreRegister,XingDebugRegister");
?>

 

    ez/loader/funs.php

<?php
	function include_onceEx($str,$throwAble=true)
	{
		$str=string2Array($str);
		for($index=0;$index<count($str);$index++):
			if(!empty($str[$index])&&file_exists($str[$index])):
				include_once(trim($str[$index]));
			endif;
		endfor;
	}
	function string2Array($str,$limiter=',')
	{
		return explode($limiter,$str);
	}
	function autoload_registerEx($str,$throwAble=true)
	{
		$str=string2Array($str);
		for($index=0;$index<count($str);$index++):
			if(!empty($str[$index])&&function_exists($str[$index])):
				spl_autoload_register(trim($str[$index]));
			endif;
		endfor;
	}
?>

 

  ez/loader/ActionsLoader.php

 

<?php
	/**
	 * @desc 控制器加载器
	 */
	include_once 'Funs.php';
	include_once 'Ez/Core/Cfc.php';
	function WcRegister($c)
	{
		include_onceEx(WEB_ACTION_PATH."/{$c}.php");	
	}
?>

 

   ez/loader/CoreLoader.php

 

<?php
	/**
	 * @desc 核心加载器
	 */
	include_once 'Funs.php';
	include_once 'Ez/Core/Cfc.php';
	function CoreRegister($c)
	{
		include_onceEx(EZ_CORE_PATH."/{$c}.php");	
	}
?>

 

    Ez/Core/Controller/IController.php

<?php
/**
 * @desc 适配器接口
 * @author mengdejun
 */
interface IController 
{
	/**
	 * @desc 控制器派发 
	 * @param $cls 用户自定义派发器名 当$cls不为空时 用户指定的派发器优先于配置文件控制器
	 */
	function dispatch($cls=null);
	/**
	 * @desc 类的初始化
	 */
	function init();
}
?>

    Ez/Core/ControllerAdapter.php

<?php
require_once'Controller/IController.php';
include_once'Error/ErrorMessage.php';
/**
 * @desc 前端派发器适配器 扩展类需继承该类或实现IController接口
 * @author mengdejun
 */
abstract class ControllerAdapter implements IController
{
	protected $_action=null;#请求类名
	protected $_method=null;#类方法
	protected $_arrays=null;#请求参数
	protected $_action_instance=null;#处理类实列
	protected $_aciton_reflection_class=null;#反射类
	/**
	 * @desc 类的初始化方法,该方法需初始化类变量$_action和$_method 该方法会自动被加载器调用
	 */
	public function init()
	{
		$class=URL_RULE_HANDLER;
		$ins=new $class;
		$_temp=$ins->parse($_SERVER["REQUEST_URI"],null);
		$this->_arrays=$_temp;
		$this->_action=CONTROLLER_UCFIRST?ucfirst($_temp[ARRAY_RETURN_CONTROLLER_KEY]):$_temp[ARRAY_RETURN_CONTROLLER_KEY];
		$this->_method=$_temp[ARRAY_RETURN_METHOD_KEY];
		return array(ARRAY_RETURN_CONTROLLER_KEY=>$this->_action,ARRAY_RETURN_METHOD_KEY=>$this->_method);
	}
	/**
	 * @desc 拓展方法 手动设置控制类
	 * @param unknown_type $action
	 * @param unknown_type $method
	 */
	public function initEx($action=null,$method=null)
	{
		if(empty($action)||empty($method)):
			$this->init();
		else:
			$this->_action=$action;
			$this->_method=$method;
		endif;
	}
	/**
	 * 显示错误信息
	 * @param string 错误信息
	 */
	public function error($s)
	{
		if(1):
			if(@class_exists($this->_action)):
				$_cls=$this->_aciton_reflection_class;
				$_ins=$this->_action_instance;
				if($_cls->isSubclassOf("MultiAction")):
					$_ms=$_cls->getMethod("doError");
					$_ms->invokeArgs($_ins,array("method"=>$this->_method,"sender"=>$this));
				endif;
			else:
				exit(str_replace("<!--error-->",$s,ERROR_MESSAGE));
			endif;
		else:
			exit(str_replace("<!--error-->",$s,ERROR_MESSAGE));
		endif;
	}
		
	/**
	 * @return the $_action
	 */
	public function get_action() {
		return $this->_action;
	}

	/**
	 * @return the $_method
	 */
	public function get_method()
	{
		return $this->_method;
	}
	/**
	 * @param $_action the $_action to set
	 */
	public function set_action($_action)
	{
		$this->_action = $_action;
	}

	/**
	 * @param $_method the $_method to set
	 */
	public function set_method($_method)
	{
		$this->_method = $_method;
	}
	/**
	 * @return the $_arrays
	 */
	public function get_arrays()
	{
		return $this->_arrays;
	}
	/**
	 * @return the $_action_instance
	 */
	public function get_action_instance()
	{
		return $this->_action_instance;
	}
	/**
	 * @param $_action_instance the $_action_instance to set
	 */
	public function set_action_instance($_action_instance)
	{
		$this->_action_instance = $_action_instance;
	}
	/**
	 * @return the $_aciton_reflection_class
	 */
	public function get_aciton_reflection_class()
	{
		return $this->_aciton_reflection_class;
	}

	/**
	 * @param $_aciton_reflection_class the $_aciton_reflection_class to set
	 */
	public function set_aciton_reflection_class($_aciton_reflection_class)
	{
		$this->_aciton_reflection_class = $_aciton_reflection_class;
	}

	
	
}
?>

    ez/core/EzController.php

 

<?php
include_once'Cfc.php';
require_once'ControllerAdapter.php';
/**
 * @desc ez派发控制器
 * @author mengdejun
 *
 */
class EzController extends ControllerAdapter
{
	private static $_instance=null;
	private function __construct(){}
	public static function getInstance()
	{
		if(!(self::$_instance instanceof self)):
			self::$_instance=new self();
		endif;
		return self::$_instance;
	}
	public function dispatch($cls=null)
	{
		#加载派发控制器
		$class=EZ_CONTROLLER_HANDLER;
		if(!class_exists($class)):
			$class=DEFAULT_ACTION_HANDLER;
		endif;
		if(!empty($cls)&&class_exists($cls)):
			$class=$cls;
		endif;
		$ins=new $class;
		#初始化前端派发器,并解析url请求对象
		$ins->init();
		#执行派发器派发工作
		$ins->dispatch();
	}
	public function run($cls=null)
	{
		$this->dispatch($cls);
	}
}
?>

 

    Ez/Core/ActionController.php

<?php
include_once'Cfc.php';
include_once'ControllerAdapter.php';
/**
 * @desc 默认派发器实现
 * @author mengdejun
 */
class ActionController extends ControllerAdapter 
{
	public function dispatch($cls=null)
	{
		if(@class_exists($this->_action)):
			$_target=new ReflectionClass($this->_action);
			$this->set_aciton_reflection_class($_target);
			if(!$_target->isAbstract()&&!$_target->isInterface()):
				$_ins=$_target->newInstance();
				$this->set_action_instance($_ins);
				if($_target->hasMethod($this->_method)):
					if($_target->isSubclassOf("Action")):
						$_fun=$_target->getMethod("addVars");
						$_fun->invokeArgs($_ins,(Array)$this->get_arrays());
					endif;
					$_fun=$_target->getMethod($this->_method);
					$_fun->invokeArgs($_ins,$this->get_arrays());
				else:
					$this->error("can't found any adaptive method about {$this->_method}");
				endif;
			endif;
		else:
			$this->error("can't found any adaptive action about {$this->_action}");
		endif;
	}
}

?>

 

   ez/core/url/iurl.php

<?php
	/**
	 * @desc URL解析器接口
	 * @author mengdejun
	 */
	interface IUrl
	{
		/**
		 * url解析器,返回数组array(ARRAY_RETURN_ACTION_KEY=>"",ARRAY_RETURN_METHOD_KEY=>"")
		 * @param string $queryString
		 */
		public function parse($queryString,$class=null);
	}
?>

   ez/core/url/UrlParamerAdapter.php

<?php
include_once 'IUrl.php';
include_once 'Cfu.php';
class UrlParamerAdapter implements IUrl 
{	
	public function parse($queryString,$class=null)
	{
		$_array=array();
		if(URL_RULE_HANDLER==__CLASS__):
			$_array[ARRAY_RETURN_CONTROLLER_KEY]=!empty($_REQUEST[ACTION_KEY])?str_replace("{c}",$_REQUEST[ACTION_KEY],CONTROLLER_RULE):str_replace("{c}",WEB_DEFAULT_CONTROLLER,CONTROLLER_RULE);
			$_array[ARRAY_RETURN_METHOD_KEY]=!empty($_REQUEST[METHOD_KEY])?str_replace("{m}",$_REQUEST[METHOD_KEY],METHOD_RULE):str_replace("{m}",WEB_DEFAULT_METHOD,METHOD_RULE);
			$_array+=$_GET;
		else:
			exit("can't found any rule adaptive ".URL_RULE_HANDLER);
		endif;
		return $_array;
	}
}

?>

 

   ez/core/basic.php

 

<?php
	function defineEx($key,$val){if(!defined($key)):define($key,$val);endif;}#常量定义
	function alias($name1,$name2){defineEx($name2,$name1);}#别名
	function exist($var){return !empty($var)&&isset($var);}#检查变量是否存在
	defineEx("ARRAY_RETURN_ACTION_KEY","Action");#默认控制器返回键
	defineEx("ARRAY_RETURN_METHOD_KEY","Method");#默认方法返回键
	alias(ARRAY_RETURN_ACTION_KEY,"ARRAY_RETURN_CONTROLLER_KEY");
	alias(ARRAY_RETURN_METHOD_KEY,"ARRAY_RETURN_METHOD_KEY");
	alias(null,"NULL");
	alias(true,"TRUE");
	alias(false,"FALSE");
?>

 

   ez/core/cfc.php

<?php
	include_once'Basic.php';
	include_once'Url/Cfu.php';
	defineEx("EZ_VERSION","1.2.0");
	defineEx("METHOD_RULE","{m}");#方法命名规则
	defineEx("CONTROLLER_RULE","{c}Action");#控制器命名规则
	defineEx("WEB_PATH","App");#web目录
	defineEx("EZ_PATH","Ez");#web目录
	defineEx("EZ_CORE_PATH",EZ_PATH.DIRECTORY_SEPARATOR."Core");#ez目录
	defineEx("EZ_HELPER_PATH",EZ_PATH.DIRECTORY_SEPARATOR."Helper");#ez目录
	defineEx("EZ_LOADER_PATH",EZ_PATH.DIRECTORY_SEPARATOR."Loader");#ez目录
	defineEx("EZ_PLUGIN_PATH",EZ_PATH.DIRECTORY_SEPARATOR."Plugin");#ez目录
	defineEx("EZ_VENDOR_PATH",EZ_PATH.DIRECTORY_SEPARATOR."Vendor");#ez目录
	defineEx("EZ_URL_PATH",EZ_CORE_PATH.DIRECTORY_SEPARATOR."Url");#ez目录
	defineEx("WEB_ACTION_PATH",WEB_PATH.DIRECTORY_SEPARATOR."Controller");#控制器目录
	defineEx("WEB_VIEW_PATH",WEB_PATH.DIRECTORY_SEPARATOR."View");#视图
	defineEx("DEFAULT_ACTION_HANDLER","ActionController");#默认派发器
	defineEx("MY_ACTION_HANDLER","MyFilterActionController");#默认派发器
	defineEx("EZ_CONTROLLER_HANDLER",MY_ACTION_HANDLER);#默认派发器
?>

   

鉴于页面有限,仅奉献部门代码,更多细节见 附件 下载

  • ez.rar (619.4 KB)
  • 下载次数: 9
分享到:
评论

相关推荐

    自己利用mvc写的框架

    标题“自己利用mvc写的框架”表明这是一个个人开发的基于MVC(Model-View-Controller)设计模式的软件框架。MVC是一种常见的软件架构模式,广泛应用于Web应用开发,它将应用程序分为三个核心部分:模型、视图和控制...

    C++实现简单的MVC框架

    在IT行业中,MVC(Model-View-Controller)是一种广泛应用于软件开发的架构模式,尤其在Web应用领域中。这个模式将应用程序分为三个主要部分,每个部分都有明确的责任,从而提高了代码的可维护性和可扩展性。本项目...

    写你自己的MVC框架

    **标题:“写你自己的MVC框架”** 在IT领域,MVC(Model-View-Controller)框架是一种广泛使用的软件设计模式,尤其在Web应用开发中。这个标题暗示我们将探讨如何从头开始构建一个MVC框架。MVC模式将应用程序分为三...

    dwz框架 asp.net mvc3

    【标题】:“DWZ框架与ASP.NET MVC3的结合应用” 【内容】 DWZ框架,全称为“Dynamic Web Zone”,是一款基于JavaScript的前端UI框架,主要用于构建富互联网应用程序(RIA)。它提供了丰富的组件库,包括表格、...

    C# MVC 经典框架

    C# MVC(Model-View-Controller)经典框架是基于微软.NET平台的一种强大的Web应用程序开发模式。这个框架结合了MVC设计模式的灵活性和C#语言的强类型特性,为开发者提供了构建可维护、高性能和高度分层的Web应用的...

    Qt使用mvc架构进行编程

    在软件开发领域,Model-View-Controller(MVC)架构是一种广泛应用的设计模式,尤其是在图形用户界面(GUI)的开发中。Qt,一个流行的跨平台应用开发框架,也支持MVC模式,使得开发者能够构建可扩展且易于维护的复杂...

    PHP mvc框架

    在PHP世界里,许多著名的框架如 Laravel、Symfony 和 CodeIgniter 都采用了MVC架构。 **标题** "PHP MVC框架" 指的是使用PHP编程语言实现的基于MVC模式的框架。这些框架帮助开发者更有效地组织和管理代码,使项目...

    SSH框架与MVC架构之间的关系

    MVC(Model-View-Controller)架构模式则是SSH框架设计的基础,它将应用程序分为三个主要部分:模型、视图和控制器。 1. **模型层(Model)**:在这个层次,主要关注业务逻辑和数据处理。Hibernate框架是SSH中的...

    PHP与MVC

    如果你不打算使用框架,也可以自己构建MVC结构。首先,定义一个基本的路由系统来解析URL并调用相应的控制器方法。然后,创建模型类来处理数据,视图文件来展示结果,最后实现控制器来协调这些组件。这将需要更多的...

    mvc模式(软件架构思想)

    综上所述,MVC模式作为软件开发中的一种重要设计理念,通过其独特的架构模式,为开发者提供了一种高效、灵活和可扩展的解决方案。然而,是否采用MVC模式以及如何实施,都需要根据具体的项目需求和团队技能进行综合...

    MVC框架源代码(自己系=写的)

    在这个标题为“MVC框架源代码(自己写的)”的压缩包中,我们推测作者分享的是他自己实现的一个JavaScript MVC框架的源代码,这可能是对经典MVC模式的一种个人化实现。 **1. Model(模型)** 模型层是MVC的核心,它...

    自己利用mvc写了个简单的框架,对理解mvc以及sturts有很大的帮助

    标题提到的是“自己利用mvc写了个简单的框架”,这表明这是一个个人实践项目,目的是构建一个基于Model-View-Controller(MVC)设计模式的轻量级框架。MVC是一种软件架构模式,它将应用程序的业务逻辑、用户界面和...

    MVC模式下多层分布式软件系统架构设计.pdf

    MVC模式下多层分布式软件系统架构设计是软件工程领域中的一种...实验结果表明,通过MVC模式和SSH框架相结合的架构设计,软件系统不仅运行效率高,而且在能耗方面也有优异的表现,说明所采取的架构设计方法是有效的。

    架构探险 从零开始写javaweb框架书上源码

    《架构探险:从零开始写JavaWeb框架》是一本深入探讨JavaWeb开发技术的书籍,其核心内容是通过源码分析来帮助读者理解并构建自己的Web框架。书中的源码提供了实际的编程实践,使读者能够亲身体验到JavaWeb框架的实现...

    简单的MVC框架例子

    **简单的MVC框架例子** 在Web开发中,MVC(Model-View-Controller)模式是一种广泛应用的设计模式,它将应用程序的结构分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。这个简单的MVC框架...

    传统MVC架构和前后端分离架构模式对比

    ### 传统MVC架构与前后端分离架构对比 #### 一、引言 在软件开发领域,架构设计的选择对于项目的成功至关重要。其中,MVC(Model-View-Controller)架构和前后端分离架构是最常见的两种架构模式。这两种模式各有...

    Web架构——MVC

    Web架构——MVC Web架构——MVC Web架构——MVC Web架构——MVC

Global site tag (gtag.js) - Google Analytics