PHP MVC 实现原理简单代码 [ 2.0 版本 ]
1.目录接口
Command--公共控制器目录(Controller基类)
Config--配置文件目录
----db.php--数据库配置
Controller--控制器目录
System--系统目录
View--视图目录
web--网站入口目录
----index.php 入口文件
2.MVC实现代码
class Yii{
public $controller_id = 'index';
public $action_id = 'index';
public static $db;
public function run(){
session_start();
//路由
$this->route();
//链接数据库
require_once(ROOT.'/../System/Class/db.class.php');
$db_config = require_once(ROOT.'/../Config/db.php');
SELF::$db= new db($db_config['db_host'],$db_config['db_user'],$db_config['db_password'],$db_config['db_name'],'utf8');
if(file_exists(ROOT.'/../Controller/'.$this->controller_id.'Controller.php')){
include_once(ROOT.'/../Controller/'.$this->controller_id.'Controller.php');
}else{
exit(ROOT.'/../Controller/'.$this->controller_id.'Controller.php not exists');
}
//执行Controller
$controller_class = $this->controller_id.'Controller';
if(class_exists($controller_class)){
$controller_obj = new $controller_class;
if(method_exists($controller_obj, 'init')){
$controller_obj->init();
}
$action_function = $this->action_id;
echo $controller_obj->$action_function();
}else{
exit($controller_class.' not exists');
}
SELF::$db->close();
}
//渲染视图
protected function render($file,$data=[]){
$this->route();
$view_path = ROOT.'/../View/'.$this->controller_id.'/'.$file.'.php';
if(file_exists($view_path)){
extract($data);
ob_start();
include_once($view_path);
$html = ob_get_contents();
ob_end_clean();
return $html;
}else{
exit('/View/'.$this->controller_id.'/'.$file.'.php not exists');
}
}
public function include_dir($path){
$handle = opendir($path);
if($handle){
while ( ($file_name=readdir($handle)) !==false ) {
if($file_name=='.' || $file_name=='..') continue;
include_once($path.'/'.$file_name);
}
closedir($handle);
}
}
public function route(){
$rt = $_SERVER['REQUEST_URI'];
$rt = explode('?', $rt);
$rt = explode('/',$rt[0]);
(!empty($rt[1])&&stripos($rt[1], '.php')===false) && $this->controller_id=$rt[1];
!empty($rt[2]) && $this->action_id=$rt[2];
}
}
3.入口文件index.php
define('ROOT',__DIR__);
require_once(ROOT.'/../System/Yii.php');
(new Yii)->run();
4.控制器 indexController.php
class indexController extends Yii{
public function index(){
$cat_list = Yii::$db->getAll("select * from xxxtab");
$list = Yii::$db->getAll("select * from theme order by xxxtab DESC");
return $this->render('index',[
'cat_list'=>$cat_list,
'list'=>$list,
]);
}
小黑
注册时间:2015-11-30
最后登录:2015-11-30
在线时长:0小时24分
最后登录:2015-11-30
在线时长:0小时24分
- 粉丝2
- 金钱10
- 威望10
- 积分110
热门源码
- 基于 Yii 2 + Bootstrap 3 搭建一套后台管理系统 CMF
- 整合完 yii2-rbac+yii2-admin+adminlte 等库的基础开发后台源码
- 适合初学者学习的一款通用的管理后台
- yii-goaop - 将 goaop 集成到 Yii,在 Yii 中优雅的面向切面编程
- yii-log-target - 监控系统异常且多渠道发送异常信息通知
- 店滴云1.3.0
- 面向对象的一小步:添加 ActiveRecord 的 Scope 功能
- Yii2 开源商城 FecShop
- 基于 Yii2 开发的多店铺商城系统,免费开源 + 适合二开
- leadshop - 基于 Yii2 开发的一款免费开源且支持商业使用的商城管理系统
共 9 条评论
不错,演示了一个简单的mvc功能。。
大赞;最近刚好在看这块东西
不错,简单明了
简单明了。
great game
great game
php做这些天生的。拼成php语法就能运行 ;就强于java,.net中的反射
我入门的时候是看这个的《手把手编写自己的PHP MVC框架实例教程》:http://www.awaimai.com/128.html
简单明了,好评!