概念
MVC是一种设计思想,一个项目由三部分构成:
- M(model):模型层,用来操作数据的
- V(view):视图层,用来显示数据
- C(Controller):控制器层,用来执行业务逻辑(调度数据和视图)
优点:
- 多人合作方便
- 代码重用性好
- 程序健壮性好
- 项目维护容易方便
模型类
1、一个表就是一个模型类
2、模型类以Model结尾,比如产品表product对应的模型类是productModel
基础模型类
每个表的模型类都需要连接数据库,我们可以将连接数据库的代码封装到所有模型的父类中(基础模型类)。
控制器
1、一个功能就是一个控制器(取数据,丢页面显示)
2、控制器必须以Controller结尾
3、控制器中的方法以Action结尾
4、通过传递参数的方法请求分发
我们用c表示控制器,a表示方法
控制器工作原理:
所有访问都是请求index,而控制器中则是存在多个页面
如何分发到相应的控制器的功能当中
框架搭建
框架文件夹
定义路由:
class Framework{
//定义路径常量
public static function initConst(){
define('DS',DIRECTORY_SEPARATOR);
define('ROOT_PATH',getcwd().DS);
define('APP_PATH',ROOT_PATH.'Application'.DS);
define('FRAMEWORK_PATH',ROOT_PATH.'Framework'.DS);
define('PUBLIC_PATH',ROOT_PATH.'Public'.DS);
define('CONFIG_PATH',APP_PATH.'Config'.DS);
define('CONTROLLER_PATH',APP_PATH.'Controller'.DS);
define('MODEL_PATH',APP_PATH.'Model'.DS);
define('VIEW_PATH',APP_PATH.'View'.DS);
define('CORE_PATH',FRAMEWORK_PATH.'Core'.DS);
define('LIB_PATH',FRAMEWORK_PATH.'Lib'.DS);
}
//导入配置文件
public static function initConfig(){
$GLOBALS['config']=require CONFIG_PATH.'config.php';
}
//确定路由
public static function initRoutes(){
$p=isset($_REQUEST['p'])?$_REQUEST['p']:$GLOBALS['config']['app']['default_platform'];
$c=isset($_REQUEST['c'])?$_REQUEST['c']:$GLOBALS['config']['app']['default_controller'];
$a=isset($_REQUEST['a'])?$_REQUEST['a']:$GLOBALS['config']['app']['default_action'];
define('PLATFORM_NAME',$p);
define('CONTROLLER_NAME',$c);
define('ACTION_NAME',$a);
define('__URL__',CONTROLLER_PATH.PLATFORM_NAME.DS);
define('__VIEW__',VIEW_PATH.PLATFORM_NAME.DS);
}
}
Framework::initConst();
Framework::initConfig();
Framework::initRoutes();
自动加载类
先在框架类中写一个加载类的函数
public function autoLoad($class_name){
$class_map=array(
'MySQLDB' => CORE_PATH.'MySQLDB.class.php',
'Model' => CORE_PATH.'Model.class.php',
);
if(isset($class_map[$class_name])){
require $class_map[$class_name];
}
elseif(substr($class_name,-5)=='Model'){
require MODEL_PATH.$class_name.'.class.php';
}
elseif(substr($class_name,-10)=='Controller'){
require __URL__.$class_name.'.class.php';
}
}
再注册一下自动加载类的函数