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);#默认派发器 ?>
鉴于页面有限,仅奉献部门代码,更多细节见 附件 下载