有关PHP中MVC的开发经验分享

2014-04-26  来源:本站原创  分类:php技巧  人气:0 

经过近一个月对MVC的研究,自己也通过网上有朋友的指导,有了一套自己的MVC流程及框架,但是感觉缺限还是很多,灵活性方面还是欠缺,但又不知道怎么样的具体改进,今天我就把我的流程及思想发布,希望有高人能够指点指点

一、入口
入口文件可以是单文件也可以是多文件,我现在用的基本属多文件,但是入口文件内容基本都是一样,为以后的修改其它的入口方式做基础,

<?php
require 'command/config.php';
require 'command/app.php';
app::run($config);
?>

首先不用说大家也看得出来,加载系统配置文件,然后通过引擎来加载系统配置。
二、引擎


复制代码 代码如下:

public function run($config){
header("Content-type:text/html;charset=utf-8");
self::$config = $config; //加载系统配置
self::copyright();
self::testsystem(); //系统环境
self::setsystem(); //设置系统参数
self::incinfo();
if(!IN_WEB){exit('网站正关闭维护中,请稍候访问!');}
defined('KEHENG_DEBUG') or define('KEHENG_DEBUG',true); // 是否调试模式
self::setpath(); //设置系统路径
self::getdatabase(); //测试数据库
self::loadlib(); //加载库
self::getRouteConfig(); //运行路由并加载控制器
}

引擎里面首先设置配置文件,再测试系统参数,加载系统模块,取得配置在的网站信息文件,设置网站需要的路径,测试系统配置里面的数据库参数,加载库文件,最后是加载路由获取请求地址。不知道这样的流程对不对,只是我根据自己的学习自己编写的一套而已,但里面却缺少缓存,具体缓存应该怎么样的设置。
这里的数据库测试是根据配置用哪一类型的数据库,再加载对该类型数据库操作的封装文件。
三、路由
以下为上面的最后一个函数,加载控制器文件,根据配置文件获得请求方式。

复制代码 代码如下:

public function getRouteConfig(){
$route_type=self::$config[route][url_type];
switch($route_type){
case 1:
//echo $_SERVER['SCRIPT_NAME'].'<br />';
$query_string=$_SERVER['QUERY_STRING'];
//echo $_SERVER['REQUEST_URI'].'<br />';
$urlstr=$_GET['controller'];
break;
case 4:
$url = end(explode('/', $_SERVER["PHP_SELF"]));
$urlstr = strtolower(substr($url,0,-4));
break;
}
if(file_exists(Contr_DIR.'Controller.php')){
require Contr_DIR.'Controller.php';
//echo $urlstr;
$template = self::$config['Templates'];
controller::load($urlstr,$template);
}else{
exit('控制器文件不存在');
}
}

四、控制器
控制器文件也蛮简单,只是根据路由分析出的地址来加载模型文件和视图文件,

复制代码 代码如下:

class controller{
public $obj;
public function load($url,$template){
$config=$template;
if(file_exists(Model_DIR.$url.'.model.php')){
$views = new views;
//echo Model_DIR.$url.'.model.php';
require Model_DIR.$url.'.model.php';
$temp = $config[$url][0];
if($temp!='' && $temp!=null && isset($temp)){
if(file_exists(Templ_DIR.$temp)){
//echo Templ_DIR.$temp;
require Templ_DIR.$temp;
}else{
exit('视图文件不存在!'.$temp);
}
}else{
exit('此页未设置显示模板!'.$temp);
}
unset($views);
}else{
exit('模型文件不存在:'.$url.'.model.php');
}
}
}

但里面有个注意的是模型文件里面需要输出的数据全部都是通过views这样一个类进行输出,包里视图文件里面所有的系统参数等。不知道,这种方法是不是显示得多此一举,原来是想把所有要输出的数据进行封装。
其它的模板文件也都是用类进行了封装,具体怎么写高人应该都知道了吧,这些只是我的个人见解,但是缓存应该怎么写,现在还是一个模糊的概念,是不是在读取数据的时候,方向应该是读取缓存,然后再判断缓存是否存在,再判断是否需要建立缓存呢?具体操作方法还是不是很明白。希望能有高人指点指点。

相关文章
  • 有关PHP中MVC的开发经验分享 2014-04-26

    经过近一个月对MVC的研究,自己也通过网上有朋友的指导,有了一套自己的MVC流程及框架,但是感觉缺限还是很多,灵活性方面还是欠缺,但又不知道怎么样的具体改进,今天我就把我的流程及思想发布,希望有高人能够指点指点 一.入口 入口文件可以是单文件也可以是多文件,我现在用的基本属多文件,但是入口文件内容基本都是一样,为以后的修改其它的入口方式做基础, <?php require 'command/config.php'; require 'command/app.php'; app::run($con

  • ASP.NET中MVC从后台控制器传递数据到前台视图的方式 2013-11-12

    这篇文章主要介绍了ASP.NET中MVC从后台控制器传递数据到前台视图的方式,以实例形式较为详细的分析了asp.net中MVC数据传递的具体实现方法,需要的朋友可以参考下 本文实例讲述了ASP.NET中MVC从后台控制器传递数据到前台视图的方式.分享给大家供大家参考.具体分析如下: 数据存储模型Model: public class CalendarEvent { public string id { get; set; } public DateTime start { get; set; }

  • asp.net中MVC借助Iframe实现无刷新上传文件实例 2013-12-06

    这篇文章主要介绍了asp.net中MVC借助Iframe实现无刷新上传文件的方法,详细分析了前端界面.回调函数与后台处理的详细流程,非常具有参考借鉴价值,需要的朋友可以参考下 本文实例讲述了asp.net中MVC借助Iframe实现无刷新上传文件的方法.分享给大家供大家参考.具体实现方法如下: html: <div id="uploadwindow" style="display: none;"> <form action="/ShopA

  • c#在excel中添加超链接示例分享 2013-10-09

    c#在excel中添加超链接示例分享,大家参考使用吧 1.新建一个项目 2.给项目添加引用:Microsoft Excel 12.0 Object Library (2007版本) using Excel = Microsoft.Office.Interop.Excel; 3.对excel的简单操作:如下代码"添加超链接"等. 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; us

  • JavaScript中实现单体模式分享 2013-11-04

    这篇文章主要介绍了JavaScript中实现单体模式分享,单体模式的定义:单体是一个用来划分命名空间并将一批相关方法和属性组织在一起的对象,如果它能够被实例化,那么只能被实例化一次,需要的朋友可以参考下 单体模式作为一种软件开发模式在众多面向对象语言中得到了广泛的使用,在javascript中,单体模式也是使用非常广泛的,但是由于javascript语言拥有其独特的面向对象方式,导致其和一些传统面向对象语言虽然在单体模式的思想上是一致的,但是实现起来还是有差异的. 首先来看看传统面向对象语言对于

  • Python中使用md5sum检查目录中相同文件代码分享 2013-12-16

    这篇文章主要介绍了Python中使用md5sum检查目录中相同文件代码分享,本文直接给出实现代码,需要的朋友可以参考下 """This module contains code from Think Python by Allen B. Downey http://thinkpython.com Copyright 2012 Allen B. Downey License: GNU GPLv3 http://www.gnu.org/licenses/gpl.html &quo

  • ASP.NET中MVC使用AJAX调用JsonResult方法并返回自定义错误信息 2014-01-07

    这篇文章主要介绍了ASP.NET中MVC使用AJAX调用JsonResult方法并返回自定义错误信息的相关资料,需要的朋友可以参考下 一.如何用AJAX调用JsonResult方法 比如FuckController中添加有个返回JsonResult类型的方法FuckJson(): <span class="kwd">public<span class="pln"> <span class="typ">JsonR

  • Ruby on Rails中MVC结构的数据传递解析 2015-01-03

    这篇文章主要介绍了Ruby on Rails中MVC结构的数据传递解析,本文来自于IBM官方网站技术文档,需要的朋友可以参考下 如果读者已经开发过基于 Rails 的应用,但对其 MVC 间的数据传递还有诸多困惑,那么恭喜您,本文正是要总结梳理 Rails 数据传递的方法和技巧.Ruby on Rails 3(以下统称为 Rails 3)是当前的主要发布版本,本文所述及的内容和代码都基于此版本. Rails 3 简介 Ruby on Rails 是一个 Ruby 实现.采用 MVC 模式的开源

  • PHP中实现crontab代码分享 2015-03-04

    这篇文章主要介绍了PHP中实现crontab代码分享,本文给出了实现代码和使用方法,需要的朋友可以参考下 1. 准备一个标准crontab文件 ./crontab # m h dom mon dow command * * * * * date > /tmp/cron.date.run 2. crontab -e 将此cron.php脚本加入系统cron 复制代码 代码如下: * * * * * /usr/bin/php cron.php 3. cron.php 源码 复制代码 代码如下: //

  • asp.net中mvc使用ajax提交参数的匹配问题解决探讨 2015-03-26

    本文为大家介绍下使用javaScript解决asp.net中mvc使用ajax提交参数的匹配问题,遇到类似情况的朋友可以参考下,希望对大家有所帮助 想到在asp.net的mvc中如果使用ajax向服务端传递参数时如果参数是一个类或者是个数组(或List集合)以及更复杂的对象时,服务端总是会发生取不到值的情况,当然网上也有很多解决的例子,但都是在服务端想办法来解决的(比如将json转换为字符串,再在服务端反序列化为一个对象),为何不能在客户端就把这个问题搞定. 其实问题没那么复杂,那是因为在jqu

  • PHP中MVC模式的模板引擎开发经验分享 2014-08-03

    MVC是模型(Model).视图(View)和控制(Controller)的缩写,PHP中采用MVC模式的目的是实现Web系统的职能分工,通俗的说就是把业务逻辑处理从用户界面视图中分离出来. 使Web系统的开发与维护更加方便,从而有效的节省人力物力,受到了越来越多企业的青眯. 模板引擎是MVC模式建立过程的重要方法,开发者可以设计一套赋予含义的标签,通过技术解析处理有效的把数据逻辑处理从界面模板中提取出来,通过解读标签的含义把控制权提交给相应业务逻辑处理程序,从而获取到需要的数据,以模板设计的形

  • PHP5中MVC结构学习 2014-05-31

    一.介绍 现在在开发WEB应用的时候,比较流行的一种做法就是使用"MVC"结构,使用如此方式去开发WEB应用程序,逻辑性强.简浩明了,使程序设计起来更加方便,快捷.何为"MVC"呢?简单的来说,它就是"模型(Model)"."视图(View)"及"控制器(Controller)"的结合体,也就是所有的"三层"抽象结构,当然这里所说的"MVC"是针对WEB上应用而言的,

  • 游戏开发经验分享之结识更多人士 2014-05-29

    除Flash程序员和后台工程师外,你结识的人士和你懂的知识一样重要. 这无疑是我开始从事自由职业就知晓的重要知识.提高自己的行业人脉存在某些技巧,但最终还是归结为会见更多人士. meet more people from spadblog.com 这是社交联系扮演重要角色的年代,所以我不必告诉你怎么做.登陆Facebook.Twitter,更新你的LinkedIn资料,跟进某博客,就新文章发表评论,在线体验游戏,最后一招是面见他人. 我们不乏机会介绍自己."这是谁谁"已是几十年来的惯用

  • jira二次开发经验分享 2013-09-25

    最近在折腾Jira的二次开发,说实话,二次开发狠是让人蛋疼,需要对系统的架构有一定的了解才好下手.虽然Jira这个产品很完善,官方有很详细的文档供开发者参考,但小弟还是花了不少时间研究,开发了近一个月的时间,现在把一些用到的知识和问题整理出来,与大家分享. 这次开发主要是做一个中间件,用来连接jira系统和其他系统从而实现系统之间的相互的通信,如创建一个问题(Issue),对jira里一些问题(即Issue)信息的修改,流程步骤(workflowstep)的改变,添加与更新字段(Field)和自

  • python中cPickle用法例子分享 2013-11-06

    这篇文章主要介绍了python中cPickle用法例子,有需要的朋友可以参考一下 在python中,一般可以使用pickle类来进行python对象的序列化,而cPickle提供了一个更快速简单的接口,如python文档所说的:"cPickle -- A faster pickle". cPickle可以对任意一种类型的python对象进行序列化操作,比如list,dict,甚至是一个类的对象等.而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复.在cPickle

  • 树形结构的3中搜索方式示例分享 2013-12-24

    树的3中常见搜索方式,包括二叉树方式(每一层只有0和1).满m叉树(每一层都有0 到m - 1).子集树,也称为全排列树,需要的朋友可以参考下 /** 树的3中常见搜索方式 1.二叉树方式(每一层只有0和1) 2.满m叉树(每一层都有0 到m - 1) 3.子集树,也称为全排列树 */ #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include

  • php中simplexml_load_string使用实例分享 2014-11-03

    这篇文章主要介绍了php中simplexml_load_string使用实例,需要的朋友可以参考下 先用一段代码重现一下问题 乍一看,结果很让人费解: <?php $string = <<<EOF <data> <foo><bar>hello</bar></foo> <foo><bar>world</bar></foo> </data> EOF; $data =

  • java去除集合中重复元素示例分享 java去除重复 2014-11-19

    这篇文章主要介绍了java去除集合中重复元素示例,大家参考使用吧 class ArrayListTest1 { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("java03"); al.add("java03"); al.add("java01"); al.add("java02"); al.add("j

  • JS中的异常处理方法分享 2014-11-27

    我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要不用户体验不好) window.onerror=function(){return true;} 下面是为了获取js异常信息,方便开发者找回问题 1,try...catch... 2 ,throw 复制代码 代码如下: <script type="text/javascript"&g

  • 初步介绍PHP扩展开发经验分享 2014-12-11

    在PHP开发的过程中,有时候为了提高性能,需要选择扩展的方式去实现,本文简单介绍怎么开发一个简单的PHP扩展,解开PHP扩展开发的神秘面纱 环境:PHP 5.2.14 CentOS 5.5 第一步:建立扩展骨架 cd php-5.2.14/ext ./ext_skel ?extname=laiwenhui 第二步:修改编译参数 cd php-5.2.14/ext/laiwenhui vi config.m4 去掉 PHP_ARG_ENABLE(laiwenhui, whether to enab