自己编写基于MVC的轻量级PHP框架.docx

上传人:b****8 文档编号:11182667 上传时间:2023-02-25 格式:DOCX 页数:11 大小:18.37KB
下载 相关 举报
自己编写基于MVC的轻量级PHP框架.docx_第1页
第1页 / 共11页
自己编写基于MVC的轻量级PHP框架.docx_第2页
第2页 / 共11页
自己编写基于MVC的轻量级PHP框架.docx_第3页
第3页 / 共11页
自己编写基于MVC的轻量级PHP框架.docx_第4页
第4页 / 共11页
自己编写基于MVC的轻量级PHP框架.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

自己编写基于MVC的轻量级PHP框架.docx

《自己编写基于MVC的轻量级PHP框架.docx》由会员分享,可在线阅读,更多相关《自己编写基于MVC的轻量级PHP框架.docx(11页珍藏版)》请在冰豆网上搜索。

自己编写基于MVC的轻量级PHP框架.docx

自己编写基于MVC的轻量级PHP框架

做WEB开发已有一年,每次都写重复的东西,因此,想自己写一下框架,以后开发方便.

本人之前学习asp.NET两年,JSP半年,可是后来因为工作的原故换成PHP.其实很不喜欢PHP的语法.还有PHP的函数名,每回都忘记..还是喜欢C#和JAVA的语法,哈...不过PHP有PHP的优点,不像ASP.NET那样封装了大量的东西,PHP更简单,更自由吧.还有应该就是PHP的开源组合.

写这编文章主要是因为那些东西要写给别人看,顺便发表了.高手看了别笑,菜鸟自己注意辨别,别被我的错误观点误导.

文章中的代码下载

一.文件结构

├ index.php入口文件

├class类存放的文件夹

   ├base.class.php基类

   ├error.class.php错误处理类

   ├parms.class.php获取参数类

├control.class.php控制类

├model.class.php模型类

├templatesmartTemplate类存放文件夹

├dbadodb类存放文件夹

├includes包含文件类

├ defines.inc.php定义各路径文件

   ├frameword.inc.php框架处理文件

   ├router.inc.php路由文件,跟据参数,跳转不同路径

├models模式存放路径

├views模版文件保存路径

├controls存放控制类的文件夹

├config.php配置文件

├admin后台

二.简单类图

三.入口文件,index.php

php

define("EXEC",1);//初始化一个常量,保存别的文件必须先有这个入口文件的引用.

define('PATH_BASE',dirname(__FILE__));//获取入口文件的路径

define('DS',DIRECTORY_SEPARATOR);//目录的分隔,’/’或’’

define('PATH_ROOT',PATH_BASE);//站点的跟目录,跟据你的入品文件存放来定义,如果放在子目录下,则要做相应修改.如下,

//把路径分组

{parts=explode(DS,PATH_BASE);

//去除最后一个路径名

array_pop(parts);

define('PATH_ROOT',implode(DS,parts));}

require_once(PATH_ROOT.DS.'includes'.DS.'defines.inc.php');//各文件夹的路径

require_once(PATH_ROOT.DS.'includes'.DS.'framework.inc.php');

echorequest->Get('a');//参数的获取GET方法

request->Post(‘a’);//获取POST参数

?

>

四.路径定义文件defines.inc.php

php

/*

*/

//nodirectaccess

defined('EXEC')ordie('Restrictedaccess');//如果单独执行这个文件,将不能执行

//站点路径

define('PATH_SITE',PATH_ROOT);

//包含文件路径

define('PATH_INCLUDE',PATH_ROOT.DS.'includes');

//类文件路径

define('PATH_CLASS',PATH_ROOT.DS.'class');

//配置文件路径

define('PATH_CONFIG',PATH_ROOT);

?

>

五.框架文件路径frameword.inc.php

f

php

//nodirectaccess

defined('EXEC')ordie('Restrictedaccess');

//loaderrorclass

require_once(PATH_CLASS.DS.'error.class.php');//包含错误处理文件

//loadbaseclass

require_once(PATH_CLASS.DS.'base.class.php');//包含基类文件

//实例化基类

load=newBase();

//实列化请求类用于获取GET或POST

//加截一个自己写的类的方法

//把自己写的类放在class文件夹下面,文件名的格式为demo.class.php

//那么类名就为classdemo{}

//实便化的方式为demo=load->library(‘demo’);

//调用demo类的Get函数则为demo->Get(‘参数’);

request=load->library('params');

//不同的目录用不同的URL方式

require_once(PATH_BASE.DS.'includes'.DS.'router.inc.php');

?

>

六.基类函数包含了常用的功能base.class.php

php

//nodirectaccess

defined('EXEC')ordie('Restrictedaccess');

classBaseextendsError

{

 

 varpath_root='';

 varpath_class='';

 varpath_control='';

 /*/构造函数

 *@paramepath应用路径

 *returnnull

 */

 publicfunctionBase()

 {

 this->path_root=PATH_ROOT;

 this->path_class=PATH_CLASS;

 this->path_control=PATH_BASE.DS.'controls';

 }

 //加载模型

 //loadmodel

 functionmodel(name)

 {

 include_once(this->path_model.DS.name.'.php');

 

 model=null;

 if(model==null)

 {

 model=newname();

 }

 returnmodel;

 

 }

 //outputpage

 /*

 *@paramaternamefilename

 *@paramaterdatareplace

 *

 */

 functionview(name,data)

 {

 Template=self:

:

template(file);

 Template->output(data);

 unset(Template);

 }

 

 //createdatabaseconnection

 functiondatabase()

 {

 include_once(PATH_CLASS.DS.'db'.DS.'adodb.inc.php');

 this->db=ADONewConnection();

 this->db->createdatabase=true;

 result=this->db->Connect(self:

:

config('db_host'),self:

:

config('db_user'),self:

:

config('db_password'),self:

:

config('db_database'));

 if(!

result)

 {

 die("Couldnotconnecttothedatabase.");

 }else{

 this->db->Execute("setnames'utf8'");

 returnthis->db;

 }

 }

 

 //createtemplate

 functiontemplate(file)

 {

 include_once(PATH_CLASS.DS.'template'.DS.'class.smarttemplate.php');

 Template=newSmarttemplate(file);

 Template->template_dir=PATH_BASE.self:

:

config('template_dir');

 Template->cache_dir=PATH_BASE.self:

:

config('cache_dir');

 

 returnTemplate;

 }

 

 //importclass

 functionlibrary(className)

 {

 if(empty(className))

 {

 returnnull;

 exit();

 }

 else

 {

 require_once(PATH_CLASS.DS.className.'.class.php');

 returnnewclassName();

 }

 }

 

 //returnconfigvalue

 functionconfig(parameter)

 {

 require_once(PATH_CONFIG.DS.'config.php');

 returnCONFIG:

:

Ini()->parameter;

 }

 

}

?

>

七.控制器父类control.class.php

 

php

classControlextendsBase

{

 varrequest;

 functionControl()

 {

 this->request=this->library('params');

 }

 //outputpage

 /*

 *@paramaternamefilename

 *@paramaterdatareplace

 *

 */

 functionview(name,data='')

 {

 Template=this->template(name.'.html');

 Template->assign('site_root',this->config('site_root'));

 Template->assign(data);

 Template->output();

 unset(Template);

 }

 //loadmodel

 functionmodel(name)

 {

 

 include_once(PATH_BASE.DS.'models'.DS.name.'.php');

 

 if(this->model==null)

 {

 this->model=newname();

 }

 returnthis->model;

 

 }

}

?

>

八.模型父类model.class.php

 

php

classModelextendsBase

{

 varrequest;

 vardb;

 functionModel()

 {

 this->request=this->library('params');

 }

 //createdatabaseconnection

 functiondatabase()

 {

 if(this->db!

=null)

 {

 returnthis->db;

 exit;

 }

 include_once(PATH_CLASS.DS.'db'.DS.'adodb.inc.php');

 this->db=ADONewConnection();

 this->db->createdatabase=true;

 result=this->db->Connect(this->config('db_host'),this->config('db_user'),this->config('db_password'),this->config('db_database'));

 if(!

result)

 {

 die("Couldnotconnecttothedatabase.");

 }else{

 this->db->Execute("setnames'utf8'");

 returnthis->db;

 }

 }

}

?

>

九.路由文件,router.inc.php

跟据URL,指定到相应的控制器,跟据网站的URL表现形式编写

php

//nodirectaccess

defined('EXEC')ordie('Restrictedaccess');

//实例化类

load=newBase();

//实列化请求类用于获取GET或POST

request=load->library('params');

//获取参数

option=@request->get('option');

task=@request->get('task');

//如果未设置文件

if(empty(option))

{

 option=load->config('index_router');

}

include_once(PATH_BASE.DS.'controls'.DS.option.'.php');

Control=newoption();

if(empty(task))

{

 Control->index();

}

else

{

 Control->task();

}

?

>

十,使用方法

使用方法.

视图V:

在把模板文件放在VIEW文件夹里面.命名方式为,login.html

控制C:

把要怎么处理的文件放在control文件夹里面,

格式为.demo.php

classdemoextendsControl

{

functionedit()

{

data=this->user->issuer();//调用模型

this->view(‘login’,data);//这个LOGIN为视图中的login.html文件

}

}

模型M:

把文件放在model文件夹里面.格式为.user.php

classuserextendsModel

{

functionissuer()

{

数据库或底层的操作,返回结果

}

}

自定义类的调用,把类放在Class文件夹下面.格式为session.class.php

先实例化.

session=load->library(‘session’);

然后再调用类中的函数

session->sessionId();

例子:

如下URL:

http:

//127.0.0.1/com/admin/?

option=test&task=getUser(注:

这里的URL格式可以在router.inc.php里面修改.同时为了让不同目录的地址格式不一样,比如前台和后台,因些,把router.inc.php规则放在了入口文件的includes目录下面)则会调用/admin/control/文件夹下面的test.php文件test类的getUser函数,如果task参数为空,则调用index函数.

文件:

/admin/control/test.php

php

classtestextendsControl

{

functionindex()

{

}

functiongetUser()

{

data['user']=this->model('member')->getUser();

this->view('test',data);

}

functionreg()

{

if(this->model('member')->isUser())

{

this->Alert(‘用户名已存在’);//error类中定义了

}

else

{

this->model('member')->addUser();

}

}

}

?

>

如果this->model('member')这个模型经常用到,可以在引用类的构造函数中初始化,不要每次都实例化.如:

Varmember;

functiontest()

{

this->member=this->model('member');

}

这样,应用的时候只要.this->member->addUser();

this->model(‘member’)->getUser();

为调用入口文件相应目录下的Models文件夹下面的member.php文件里面的getUser();函数

文件:

/admin/models/member.php

php

classmemberextendsModel

{

functiongetUser()

{

//returnthis->db->GetOne("selectusernamefromuserwhereuserId=1");//这种方式处理数据库

//this->request->Get(‘test’)

//this->request->Post(‘test’)这种方式获取参数,在父类中已定义

return'admin';

}

//验证用户名是否已经存在

functionisUser()

{

userName=this->request->Post(‘username’);

passWord=this->request->Post(‘password’);

returnthis->db->GetOne(“selectcount(*)fromuserwhereusername=’userName’andpassword=’passWord’”);

}

}

?

>

this->view(‘test’,data);

显示视图,调用/admin/views/test.html文件,用SmartTemplate类的方式生成data为数组

这部份请查看smartTemplate类的使用方法

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1