关闭

MVC中去掉index.php(优雅的使用url)

836人阅读 评论(0) 收藏 举报
分类:

前段时间写了一篇MVC中的简单路由
后来发现,该文章实现的功能,支持controller里面的路径,已经url参数的设置,因此,今天把优化的代码贴上。
config.php

<?php
/**
 * Created by PhpStorm.
 * User: koastal
 * Date: 2016/5/15
 * Time: 10:48
 */
define("APP_PATH",substr(__DIR__,0,strlen(__DIR__)-5));
define("Controller_PATH",APP_PATH.DIRECTORY_SEPARATOR."controller");
define("Model_PATH",APP_PATH.DIRECTORY_SEPARATOR."model");
define("View_PATH",APP_PATH.DIRECTORY_SEPARATOR."view");
define("Lib_PATH",APP_PATH.DIRECTORY_SEPARATOR."libs");

Loader.php

<?php

/**
 * Created by PhpStorm.
 * User: koastal
 * Date: 2016/5/15
 * Time: 12:03
 */
require_once 'config.php';
class Loader
{
    public  static function baseLoad()
    {
        require_once("Controller.php");
        require_once("Model.php");
    }
    public static function searchFile($filename,$path)
    {
        $filePath = false;
        $list = scandir($path);
        foreach($list as $file){
            $realPath = $path.DIRECTORY_SEPARATOR.$file;
            if(is_dir($realPath) && $file!='.' && $file!='..'){
                $res = Loader::searchFile($filename,$realPath);
                if($res){
                    return $res;
                }
            }elseif($file!='.' && $file!='..'){
                if($file == $filename){
                    $filePath = $realPath;
                    break;
                }
            }
        }
        return $filePath;
    }
    public static function autoload($class)
    {
        $filename = $class.".class.php";
        $cflag = Loader::searchFile($filename,Controller_PATH);
        $mfalg = Loader::searchFile($filename,Model_PATH);
        $path = false;
        $path = ($cflag != false)? $cflag:$path;
        $path = ($mfalg != false)? $mfalg:$path;
        if($path == false){
            exit("Class Load Failed.");
        }else{
            require_once($path);
        }
    }
}
Loader::baseLoad();
spl_autoload_register(array('Loader', 'autoload'));

router.php

<?php
/**
 * Created by PhpStorm.
 * User: koastal
 * Date: 2016/5/15
 * Time: 15:09
 */
require_once("config.php");
require_once("Loader.php");
$path = isset($_SERVER['PATH_INFO'])? $_SERVER['PATH_INFO']:null;
$path = str_replace("index.php/",'',$path);
$path_array = explode("/",$path);
array_shift($path_array);   //得到完整参数
if(count($path_array)<3){
    switch(count($path_array)){
        case 2:
            $controller = $path_array[0];
            $function = $path_array[1];
            break;
        case 1:
            $controller = $path_array[0];
            $function = "index";
            break;
        case 0:
            $controller = "index";
            $function = "index";
            break;
    }
}else{
    $param = array();   //参数
    foreach($path_array as $num=>$name){
        $temp_dir = Controller_PATH."/".$name;
        if(is_dir($temp_dir)){
            array_shift($path_array);
            continue;
        }else{      //控制器
            $controller = isset($path_array[$num])? $path_array[$num]:'index';
            $function = isset($path_array[($num+1)])? $path_array[($num+1)]:'index';
            array_shift($path_array);array_shift($path_array);
            $param = $path_array;
            break;
        }
    }
    if(!empty($param)){ //处理参数
        for($i=0;$i<count($param);$i=$i+2){
            $key = $param[$i];
            $value = isset($param[($i+1)])? $param[($i+1)]:null;
            $_GET[$key] = $value;
        }
    }
}

$controller .= "Controller";
$controller_obj = new $controller;
$controller_obj->$function();
?>

与上一篇文章的优化之处就是增强了对$path_array的判断,首先判断前面的参数是否为路径,如果为路径则从数组中弹出,直到取到控制器和方法,然后将控制器和方法也从数组中弹出,剩下的就是url传递给方法的参数了。

全文完。

0
0
查看评论

PHP简单实现MVC框架路由功能模式

说到使用PHP进行网站开发,自然离不开各种PHP的开发框架,开发框架为我们提供了灵活的开发方式,MVC层分离,业务解耦等等,让我们的开发更为快捷方便。但是很多人只是会使用框架,却从来不去了解框架的内部是如何实现的,这对于我们编程能力的提高是没有一点用处的。那么这一篇博文,我们就先来一个简单点的功能,...
  • Zhihua_W
  • Zhihua_W
  • 2016-11-15 09:11
  • 4773

5分钟搭建 nginx +php --------------(LNMP)新手专用

这里要先声明一下,针对Nginx的php安装和针对apache的php安装是有区别的,因为Nginx中的php是以fastcgi的方式结合nginx的,可以理解为nginx代理了php的fastcgi,而apache是把php作为自己的模块来调用的。 先把php 和php-f...
  • dyllove98
  • dyllove98
  • 2014-11-14 16:48
  • 105088

php中实现MVC的思想

什么是MVC? 简单的说就是将网页源码分类、分层。 MVC三个字母的含义: M:Model 模型,负责数据库操作。 V:View 视图,负责调用Model读取数据,再调用模板,展示出最终效果。 C:Controller 控制器,程序的入口,决定改调用哪个View,并告诉View该做什么。 ...
  • wjc19911118
  • wjc19911118
  • 2011-11-22 22:15
  • 2044

CI框架去掉URl中的index.php部分

为美观一些,去掉CI默认url中的index.php。分三步操作: 1.打开apache的配置文件,conf/httpd.conf : LoadModule rewrite_module modules/mod_rewrite.so,把该行前的#去掉。 搜索 AllowOverride Non...
  • u012581409
  • u012581409
  • 2015-01-20 16:13
  • 1779

php 去掉Url里的 index.php

php项目中,为了访问链接的友好性及SEO优化,我们经常需要为访问页面配置一个短链接,并把index.php去掉。 php所用的web服务器通常为:nginx或者apache。下面分别说一下两种服务器的不同配置方法NGINX 配置: APACHE配置
  • wanghao725
  • wanghao725
  • 2016-02-25 17:24
  • 1834

windows+nginx+php运行环境部署

第一部分:准备工作。(系统:Windows 8.1) 1.首先是下载软件。 NGINX-1.3.8官网下载:http://nginx.org/en/download.html PHP5.4.8版本下载地址:http://windows.php.net/download/ Mysql5.5.2...
  • lsm135
  • lsm135
  • 2016-07-02 19:42
  • 5162

LNMP(Linux+Nginx+Mysql+PHP)环境下安装yaf框架并编写一个MVC例子

LNMP(Linux+Nginx+Mysql+PHP)环境下安装yaf框架并编写一个MVC例子 1、下载yaf源码包yaf-2.2.9.tar.gz,并将其上传到服务器指定的位置,然后解压并安装 2、利用Yaf自带的快速代码生成工具 yaf_code_generator 生成代码 入口文件:是所有请...
  • dalaoadalaoa
  • dalaoadalaoa
  • 2015-07-14 14:46
  • 2004

ThinkPHP3.2 --- URL去除index.php方法

本文所用的是集成环境wampserver,去除index.php只需要三步。 第一步:找到Apache中的httpd.conf(也就是Apache的配置),打开文件,用记事本打开比较好,然后找到这一行代码#LoadModule rewrite_module modules/mod_rewrite.s...
  • sinat_19327991
  • sinat_19327991
  • 2017-07-09 10:15
  • 1083

去掉CodeIgniter(CI)默认url中的index.php

//1.打开apache的配置文件,conf/httpd.conf :LoadModule rewrite_module modules/mod_rewrite.so//把该行前的#去掉。//搜索 AllowOverride None(配置文件中有多处),看注释信息,将相关.htaccess的该行信...
  • qq3559727
  • qq3559727
  • 2016-08-30 16:47
  • 3385

Windows下配置nginx+php(wnmp)

第一部分:准备工作。(系统:Windows 8.1) 1.首先是下载软件。 NGINX-1.3.8官网下载:http://nginx.org/en/download.html PHP5.4.8版本下载地址:http://windows.php.net/download/ My...
  • Free_Wind22
  • Free_Wind22
  • 2016-10-11 16:44
  • 3399
    个人资料
    • 访问:201901次
    • 积分:3800
    • 等级:
    • 排名:第10030名
    • 原创:187篇
    • 转载:5篇
    • 译文:0篇
    • 评论:37条
    最新评论