首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

开发自各儿PHP MVC框架(一)

2012-09-16 
开发自己PHP MVC框架(一)本教程翻译自John Squibb 的Build a PHP MVC Framework in an Hour,但有所改动,原

开发自己PHP MVC框架(一)

本教程翻译自John Squibb 的Build a PHP MVC Framework in an Hour,但有所改动,原文地址:http://johnsquibb.com/tutorials

这个教程可以使大家掌握用mvc模式开发php应用的基本概念。此教程分为三个部分,现在这篇是第一部分。

现在市面上有很多流行的框架供大家使用,但是我们也可以自己动手开发一个mvc框架,采用mvc模式可以大大减少我们开发应用的时间,并且能够更好的组织项目源代码,而且其中的某些模块还可在其它项目中使用。现在我要教大家写一个简单的mvc框架。由于这个项目很简单,轻量,所以可能并不是最佳实践,也不具备安全性,还需要大家在实际应用中完善。

所用技术:php,面向对象开发方法。

开始

首先在网站根目录下建立三个文件夹

modelsviewscontrollers

然后在根目录下新建一个文件:

index.php

现在项目结构应该像这样

§ 网站根目录

  § index.php

  § models/

  § views/

  § controllers/


index.php是整个web应用的入口点,所有的用户请求都会经过它。我们会写一些代码来把用户请求分派到相应的控制器中,这些控制器存放在controllers文件夹里。之后,我们就可以用下面的方式来实现页面跳转:

http://你的域名.com/index.php?page1http://你的域名.com/index.php?page2http://你的域名.com/index.php?page3设置前端控制器index.php

首先在index.php中定义网站根目录和网站域名,以便在整个应用中访问。

<?php/** * 此文件会把所有的传入参数分派到相应的控制器中 *///获取请求参数$request = $_SERVER['QUERY_STRING'];//解析请求页面和其它GET变量$parsed = explode('&' , $request);//页面是第一个元素$page = array_shift($parsed);//剩余的为GET变量,也把它们解析出来$getVars = array();foreach ($parsed as $argument){    //split GET vars along '=' symbol to separate variable, values    list($variable , $value) = split('=' , $argument);    $getVars[$variable] = $value;}//构成控制器文件路径$target = SERVER_ROOT . '/controllers/' . $page . '.php';//引入目标文件if (file_exists($target)){    include_once($target);    //修改page变量,以符合命名规范(如$page="news",我们的约定是首字母大写,控制器的话就在后面加上“_Controller”,即News_Controller)    $class = ucfirst($page) . '_Controller';    //初始化对应的类    if (class_exists($class))    {        $controller = new $class;    }    else    {        //类的命名正确吗?        die('class does not exist!');    }}else{    //不能在controllers找到此文件    die('page does not exist!');}//一但初始化了控制器,就调用它的默认函数main();//把get变量传给它$controller->main($getVars);?>

再次访问http://你的域名.com/index.php?news&article=howtobuildaframework,你将会看到从News_Controller打印出来的信息。注意,我们现在用die()来处理错误,我们可以用其它更好的错误处理来规制它,但现在使用die()足够了,试试访问其它页面如http://你的域名.com/index.php?books,你会看到"page does not exist!"错误。创建一个Model(模型)完善News_Controller。假设我们有一些新闻片段来供读者阅读,那么就需要News_Controller这个控制器去调用一个模型来抓取相关的新闻片段,无论它们是存储在数据库还是文件里。在models文件夹里新建一个文件,“news.php”,代码如下:

<?php/* *这个文件处理文章的查询,并产生新闻文章*  */ class News_Controller{     /**      * $template变量会保存与此控制器相关的"view(视图)"的文件名,不包括.php后缀     *      */     public $template = 'news';     /**     * 此方法为route.php默认调用     *      * @param array $getVars 传入到index.php的GET变量数组      */      public function main(array $getVars) {         $newsModel = new News_Model;          //获取一片文章          $article = $newsModel->get_article($getVars['article']);          //创建一个视图,并传入该控制器的template变量          $view = new View_Model($this->template);          //把文章数据赋给视图模板          $view->assign('title' , $article['title']);          $view->assign('content' , $article['content']);      }}?>


再加载页面,你就能够看到你的视图模板中的变量,已经被正确的替换掉了。好了,你的简单的MVC框架已经搭建好了,下面我会继续讲《开发自己PHP MVC框架(二)》

热点排行