制作自己的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





    本文转自 咖啡机(K.F.J)   博客园博客,原文链接:http://www.cnblogs.com/strick/p/5767906.html,如需转载请自行联系原作者


相关文章
|
3月前
|
前端开发 Java 程序员
从零基础手写Spring MVC框架,准备好进阶程序员了吗?
我们程序员大部分人都是野路子,不懂什么叫代码规范。写了一个月的代码,最后还得其他老司机花3天时间重构,相信大部分老司机都很头疼看新手的代码。
26 1
|
4月前
|
设计模式 前端开发 JavaScript
浅谈MVC、MVP、MVVM框架模式
浅谈MVC、MVP、MVVM框架模式
33 0
|
4月前
|
Java 数据库连接 Maven
SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!
SSM框架整合:掌握Spring+Spring MVC+MyBatis的完美结合!
|
3天前
|
前端开发 Java 应用服务中间件
Spring MVC框架概述
Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
11 1
|
1月前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南
|
2月前
|
前端开发 JavaScript Java
MVC框架:SpringMVC(三)
MVC框架:SpringMVC
33 0
|
2月前
|
JSON 前端开发 JavaScript
MVC框架:SpringMVC(二)
MVC框架:SpringMVC
39 0
|
2月前
|
前端开发 Java 应用服务中间件
MVC框架:SpringMVC(一)
MVC框架:SpringMVC
65 0
|
2月前
|
前端开发 Java 数据库连接
探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty
探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty
|
3月前
|
前端开发 Java 数据库连接
认识Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty
Spring框架 Spring是一个轻量级的开源框架,用于构建企业级应用。它提供了广泛的功能,包括依赖注入、面向切面编程、事务管理、消息传递等。Spring的核心思想是控制反转(IoC)和面向切面编程(AOP)。
84 3