澳门皇冠金沙网站-澳门皇冠844网站

热门关键词: 澳门皇冠金沙网站,澳门皇冠844网站

澳门皇冠844网站php编写一个简单的路由类,PHP入

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

1 什么是MVC

类代码:

复制代码 代码如下:

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式。

复制代码 代码如下:

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

MVC把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

<?php
class Router
{
public function getRouter($types = 1)
{
if ( isset($_SERVER['PATH_INFO']) )
{
$query_string = substr(str_replace(array('.html','.htm', '.asp', '//'), '',$_SERVER['PATH_INFO']),1);
}
else
{
$query_string = str_replace($_SERVER['SCRIPT_NAME'], '',$_SERVER['PHP_SELF']);
}
if ( $types == 1 )
{
// 第一种类型以/分隔
$temp = explode('/', $query_string);
}
elseif ($types == 2)
{
$temp = explode('-', $query_string);
}
elseif ($types == 3)
{
return array('Controller'=>$_GET['controller']);
}
if ( empty($temp[0]) )
{
return array('Controller' => 'index','Operate' => 'index');
}
if ( empty($temp[1]) )
{
$temp[] = 'index';
}
// 去除空项
foreach ($temp as $val)
{
if ($val)
{
$url[] = $val;
}
}
list($controller, $operate) = $url;
//有参数的情况
$params = array();
if ( count($url)>2 )
{
array_shift($url);
array_shift($url);
$params = $url;
}
return
array(
"Controller" => $controller,
"Operate" => $operate,
"params" => $params,
);
}
}
?>

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

PHP中MVC模式也称Web MVC,从上世纪70年代进化而来。

调用方法:

复制代码 代码如下:

MVC的目的是实现一种动态的程序设计,便于后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。

复制代码 代码如下:

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(); //运行路由并加载控制器
}

除此之外,此模式通过对复杂度的简化,使程序结构更加直观。

<?php
$url = new Router();
$url->getRouter(1);
print_r($url); //在这里可以看到各元素
?>

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

MVC各部分的职能:

您可能感兴趣的文章:

  • php url路由入门实例
  • PHP URL路由类实例
  • PHP MVC框架路由学习笔记
  • 一个简单的php路由类
  • php类自动加载器实现方法
  • php中使用__autoload()自动加载未定义类的实现代码
  • PHP中类的自动加载的方法
  • 解析php类的注册与自动加载
  • php类的自动加载操作实例详解
  • PHP实现的简单路由和类自动加载功能

复制代码 代码如下:

模型Model – 管理大部分的业务逻辑和所有的数据库逻辑。模型提供了连接和操作数据库的抽象层。控制器Controller

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']澳门皇冠844网站,;
//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('控制器文件不存在');
}
}

  • 负责响应用户请求、准备数据,以及决定如何展示数据。视图View – 负责渲染数据,通过HTML方式呈现给用户。

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

一个典型的Web MVC流程:

复制代码 代码如下:

Controller截获用户发出的请求;Controller调用Model完成状态的读写操作;Controller把数据传递给View;View渲染最终结果并呈献给用户。

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');
}
}
}

2 为什么要自己开发MVC框架

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

网络上有大量优秀的MVC框架可供使用,本教程并不是为了开发一个全面的、终极的MVC框架解决方案。

您可能感兴趣的文章:

  • php简单实现MVC
  • 初识php MVC
  • php实现最简单的MVC框架实例教程
  • 浅析PHP程序设计中的MVC编程思想
  • PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
  • 基于PHP Web开发MVC框架的Smarty使用说明
  • php打造属于自己的MVC框架
  • 关于php mvc开发模式的感想
  • php实现简单的MVC框架实例

我们将它看作是一个很好的从内部学习PHP的机会。

在此过程中,你将学习面向对象编程和MVC设计模式,并学习到开发中的一些注意事项。

更重要的是,通过自制MVC框架,每个人都可以完全控制自己的框架,将你的想法融入到你开发的框架中。

虽然不一定是最好的,但是你可以按照自己的方式开发各种功能。

3 开始开发自己的MVC框架

3.1 目录准备

在开始开发前,让我们先来把项目建立好。

假设我们建立的项目为 project,MVC的框架命名为 fastphp,那么接下来,第一步要把目录结构设置好。

project

WEB部署目录 ├─application 应用目录 │ ├─controllers 控制器目录 │ ├─models 模块目录 │

├─views 视图目录 ├─config 配置文件目录 ├─fastphp 框架核心目录 ├─static 静态文件目录

├─index.php 入口文件

然后把Nginx或者Apache的站点根目录配置到project目录。

3.2 代码规范

在目录设置好以后,我们接下来规定代码的规范:

MySQL的表名需小写或小写加下划线,如:item,car_orders。模块名(Models)需用大驼峰命名法,即首字母大写,并在名称后添加Model,如:ItemModel,CarModel。控制器(Controllers)需用大驼峰命名法,即首字母大写,并在名称后添加Controller,如:ItemController,CarController。方法名(Action)需用小驼峰命名法,即首字母小写,如:index,indexPost。视图(Views)部署结构为控制器名/行为名,如:item/view.php,car/buy.php。

上述规则是为了程序能更好地相互调用。

接下来就开始真正的PHP MVC编程了。

3.3 重定向

重定向的目的有两个:设置根目录为project所在位置,以及将所有请求都发送给 index.php 文件。

如果是Apache服务器,在 project 目录下新建一个 .htaccess 文件,内容为:

mod_rewrite.c> # 打开Rerite功能 RewriteEngine On # 如果请求的是真实存在的文件或目录,直接访问

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d

# 如果访问的文件或目录不是真事存在,分发请求至 index.php RewriteRule .

index.php

如果是Nginx服务器,修改配置文件,在server块中加入如下的重定向:

location / { # 重新向所有非真是存在的请求到index.php try_files $uri $uri/ /index.php$args; }

这样做的主要原因是:

(1)静态文件能直接访问。

如果文件或者目录真实存在,则直接访问存在的文件/目录。

比如,静态文件static/css/main.css真实存在,就可以直接访问它。

(2)程序有单一的入口。

这种情况是请求地址不是真实存在的文件或目录,这样请求就会传到 index.php 上。

例如,访问地址:localhost/item/view/1,在文件系统中并不存在这样的文件或目录。

那么,Apache或Nginx服务器会把请求发给index.php,并且把域名之后的字符串赋值给REQUEST_URI变量。

这样在PHP中用$_SERVER['REQUEST_URI']就能拿到/item/view/1;

(3)可以用来生成美化的URL,利于SEO。

3.4 入口文件

接下来,在 project 目录下新建 index.php 入口文件,文件内容为:

应用目录为当前目录define('APP_PATH', __DIR__ . '/');// 开启调试模式define('APP_DEBUG',

true);// 加载框架文件require(APP_PATH . 'fastphp/Fastphp.php');//

加载配置文件$config = require(APP_PATH . 'config/config.php');// 实例化框架类(new

Fastphp($config))->run();

注意,上面的PHP代码中,并没有添加PHP结束符号?>。

这么做的主要原因是:

对于只有 PHP 代码的文件,最好没有结束标志?>,

PHP自身并不需要结束符号,不加结束符让程序更加安全,很大程度防止了末尾被注入额外的内容。

3.5 配置文件

在入口文件中,我们加载了config.php文件的内容,那它有何作用呢?

从名称不难看出,它的作用是保存一些常用配置。

config.php 文件内容如下,作用是定义数据库连接参数参数,以及配置默认控制器名和操作名:

数据库配置define('DB_NAME', 'project'); define('DB_USER', 'root');

define('DB_PASSWORD', '123456'); define('DB_HOST', 'localhost');//

默认控制器和操作名$config['defaultController'] = 'Item'; $config['defaultAction']

本文由澳门皇冠金沙网站发布于编辑程序,转载请注明出处:澳门皇冠844网站php编写一个简单的路由类,PHP入

相关阅读