制作自己的MVC框架(一)——简单粗暴的实现

现在市面上有很多成熟的MVC框架,可以拿来直接用,但自己造一下轮子其实也挺有意思的。

下面先来看个最简单粗暴的MVC实现。

5个文件就能实现最简单的MVC,在Apache中设置一个虚拟目录,配置个简单域名,就可以顺利访问了。

为了实现简单,这里没有写模型层。

一、index.php

这个文件是入口文件,所有的请求就将会先进入到这个文件,然后再通过路由进入到不同的控制器中。

这就是常说的单一入口

1. 我简单的将路由也放在了这个文件中。

2. 还将一个简单的全局常量放在了这里。

define(‘APP_PATH‘, dirname(__FILE__));

//路由逻辑
if(empty($_GET[‘c‘])) {
    $uri = ltrim($_SERVER[‘REQUEST_URI‘],‘/‘);
    $params = explode(‘/‘,$uri);//简单粗暴的将URL分割,例如index/action
    $controller = $params[0];//第一个变量是控制器名
    $action = $params[1];//第二个是方法名
}else {
    $controller = $_GET[‘c‘];//第二种域名访问方式 "pwstrick.com?c=index&a=action"
    $action = $_GET[‘a‘];
}

3. 再是引入试图的生成类和控制器类

4. 最终初始化这个控制器,就能实现访问了。

//初始化逻辑
require_once ‘./view.php‘;//试图控制类
require_once APP_PATH . ‘/controller/‘.$controller.‘.php‘;//需要访问的控制器,例如index控制器
$handler = new $controller;//初始化这个控制器,例如index
$handler->$action();//执行方法,也就是最终访问的那个地方

这样就完成了一次简单的访问,下图就是输入了一个简单URL,展示了view中的内容。

二、.htaccess

“.htaccess”是做路由用的,因为我用的服务器软件是Apache,所以需要,如果是Nginx就不需要。

这里将URL中的“index.php”干掉了,不然访问就需要多打这个,例如“index.php?c=index&a=action”。

这些参数具体的用法,可以上网自己查一下的。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]

三、视图

市面上有很多模版引擎,很多都需要些学习成本。这里我用了PHP自带的Output Control相关函数。

下面的代码是“view.php”中的方法。

public function fetch($template, array $data = []) {
        $data = array_merge($this->attributes, $data);
        ob_start();
        extract($data);//设置view上面的参数
        include $this->templatePath . $template;//引入试图文件的绝对路径
        $output = ob_get_clean();//输出页面
        return $output;
}

下面的代码是“view/index.php”中的代码,就仅仅是输出一个变量“$send”而已。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>badge</title>
</head>
<body>
    <strong><?php echo $send?></strong>
</body>
</html>

四、控制器

控制器在入口文件“index.php”中初始化了一下,并且也引用了一下指定的方法。

里面也没有使用到什么高大上的方法,就是在执行生成view的代码。

//一般都会继承一个通用的controller父类
class index {
    function action() {
        $view = new view(APP_PATH . ‘/view/‘);//初始化视图控制类
        $output = $view->fetch( ‘index.php‘,array(‘send‘ => ‘发送‘));//指定要输出的视图名,并设置变量
        echo $output;
    }
}

这样就实现了一次简单MVC。

接下来会具体的做些逻辑的分层,添加一些通用的功能,路由,引入数据操作,配置文件等。

demo下载:

https://github.com/pwstrick/framework_demo

时间: 2024-10-09 14:16:05

制作自己的MVC框架(一)——简单粗暴的实现的相关文章

cocos2dx之lua项目开发中MVC框架的简单应用

**************************************************************************** 时间:2015-03-31 作者:Sharing_Li 转载注明出处:http://blog.csdn.net/sharing_li/article/details/44658317 **************************************************************************** 最近的游

开源一个windows下的定时任务框架,简单粗暴好用。

这里是你想要的功能: 支持插件,将你要执行的任务编译成程序集放到框架的根目录下,再进行简单的配置就行了. 支持Corn表达式.想让任务在什么时候执行就在什么时候执行. 支持安装成windows service (通过topshelf实现) 保证任务在执行阶段,就算到了下一个触发时间,不重复执行(如果本次还没执行完的话). 还有…等我想到了再实现^o^,您也可以关注项目的地址:https://github.com/leleroyn/Windows-TaskSchedule,提出你想要的功能. 简单

使用Intellij Idea自定义MVC框架

今天我学习了自定义一个简单的MVC框架,这个我们首先要知道什么是MVC框架! MVC框架: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 我们今天自己定义的

ideat使用struts2之自定义MVC框架

今天我学习了自定义一个简单的MVC框架,这个我们首先要知道什么是MVC框架! MVC框架: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 我们今天自己定义的

C#使用MVC框架实现登陆验证

步骤一:需求分析 我的目标是利用MVC框架实现简单登陆验证.从客户端输入用户名和密码.然后传给数据库验证.如果数据库存在此用户名ID和密码,则返回客户端账户姓名的成功提示.否则返回客户端失败信息. 步骤二:搭建MVC框架 新建项目>WEB>WEB应用程序 步骤三:先添加一个控制器,然后VIEWS文件夹下找到对应和控制器同名文件夹里面搭建VIEW界面样式,最后修改路由 确定能在浏览器访问 控制器: public class LoginController : Controller    {   

自己写一个java的mvc框架吧(三)

自己写一个mvc框架吧(三) 根据Method获取参数并转换参数类型 上一篇我们将url与Method的映射创建完毕,并成功的将映射关系创建起来了.这一篇我们将根据Method的入参参数名称.参数类型来获取参数,并转换参数类型,使其能够符合Method的定义. 事先说明 因为这里只是一个mvc框架的简单实现,仅仅只做到了基本数据类型和基本数据类型包装类的转换,没有做到spring那样的很复杂的数据绑定功能.所以我在代码上面加了比较强的校验. 现在开始写吧 我们从一次http请求中获取参数的时候,

自己动手写一个简单的MVC框架(第二版)

一.ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件. 在这个System.Web.Routing.dll中,有一个最重要的类叫做UrlRoutingModule,它是一个实现了IHttpModule接口的类,在请求处理管道中专门针对ASP.NET MVC请求进行处理.首先,我们要了解一下UrlRoutingModule是如何起作用的. (1)IIS网站的配置可以分为两个块:

PHP之简单实现MVC框架

PHP之简单实现MVC框架 1.概述 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 2.代码结构 3.代码实现 1 2 3 4 5 6 7 8 9 10 1

AsMVC:一个简单的MVC框架的Java实现

当初看了<从零开始写一个Java Web框架>,也跟着写了一遍,但当时学艺不精,真正进脑子里的并不是很多,作者将依赖注入框架和MVC框架写在一起也给我造成了不小的困扰.最近刚好看了一遍springMVC的官方文档,对过去一段时间的使用做了一下总结,总结了一些MVC的使用需求,打算自己开坑写一个MVC框架,虽然是重复造轮子的过程,但也是学习提高的过程. 1.我们可能需要一个什么样的MVC框架 (1)用户一:我讨厌配置文件,最好能用注解的全用注解注解,能扫描直接扫描 (2)用户二:最好我导入一个j