资讯专栏INFORMATION COLUMN

基于PSR-0编码规范开发一套PHP-MVC框架(一)

hqman / 2858人阅读

摘要:二站点全局配置文件。路由结构命名空间路由别名控制器方法四框架启动文件。加载控制器文件执行方法方法不存在控制器不存在自动加载类文件五加载配置类。文件名键名获取全部选项配置文件不存在六路由类。欢迎使用框架八隐藏文件。九本地域名访问。

一、入口文件。index.php

二、站点全局配置文件。configs/Website.php


三、全局路由配置文件。configs/Routes.php

array(
*           "路由别名"=>"控制器@方法"
*       )
*   )
*/
return array(

    "Home"=>array(
        "index-index"=>"IndexController@index",
        "index/test"=>"IndexController@test",
    ),

    "Admin"=>array(
        "login"=>"IndexController@login"
    ),
    
);

四、框架启动文件。frame/App.php

ctrl;
        $action = $route->action;
        $namespace = $route->namespace;
        if($namespace) {
            $ctrlFile = CTRL."/".$namespace."/".$ctrl.".php" ;
            $ctrlObj = CTRLNAMESPACE.$namespace."".$ctrl;
        } else {
            $ctrlFile = CTRL."/".$ctrl."Controller.php";
            $ctrlObj =  CTRLNAMESPACE.$ctrl."Controller" ;
        }
        if(is_file($ctrlFile)) {
            require_once($ctrlFile);
            $obj = new $ctrlObj;
            if(method_exists($obj,$action)) {
                $obj->$action();
            } else {
                throw new Exception($action."方法不存在", 1);
                
            }
        } else {
            throw new Exception($ctrl."控制器不存在", 1);
        }
    }
    
    //自动加载类文件
    static public function autoload($class)
    {
        $file = BASEPATH."/".str_replace("", "/", $class).".php";
        if(is_file($file)) {
            require_once($file);
        } else {
            return false;
        }
    }
}

五、加载配置类。frame/Libs/Config.php


六、路由类。frame/Libs/Route.php

checkRoute($path[0]);
            if(!isset($path[0]) || !$isExists) {
                throw new Exception($path[0]."路由不存在", 1);            
            }
        } else {
            $this->ctrl = "Welcome";
            $this->action = "index";
        }
    }

    private function checkRoute($alias)
    {
        $routes = Config::get("Routes",null,true);
        foreach ($routes as $key => $value) {

            foreach ($value as $k => $v) {
                if($k == $alias) {
                    $c = explode("@", $v);
                    $this->ctrl = $c[0];
                    $this->action = $c[1];
                    $this->namespace = $key;
                    return true;
                } 
            }
        }
        return false;
    }
}

七、默认控制器。app/Controllers/WelcomeController.php

Hello,World欢迎使用PHP-FRAME框架");
    }
}

八、隐藏index.php文件。.htaccess



    Options -MultiViews


RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

九、本地域名访问 http://localhost。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28622.html

相关文章

  • 基于PSR-0编码规范开发PHP-MVC框架(二)

    摘要:框架采用编码规范开发的一套框架,纯面向对象开发,依赖包管理模版引擎数据库类错误输出等在项目根目录下使用命令执行安装插件二入口文件。引入文件,开启错误提示插件三数据库配置文件。视图模版不存在七控制器操作数据并显示到页面。 一、composer依赖包管理工具。composer.json { name:PHP-FRAME, author:Guoming.Zhang, ...

    graf 评论0 收藏0
  • 现在写 PHP,你应该知道这些

    摘要:首先你应该是在用以上的版本,如果版本在这之下,是时候该升级了。按照其官网的说法,这个组织的目的并不是告诉你你应该怎么做,只是一些主流的框架之间相互协商和约定。和没有出现在以上的列表中,是因为还没有投票通过。不要被这些话所困扰。 首先你应该是在用 PHP 5.3 以上的版本,如果 PHP 版本在这之下,是时候该升级了。我建议如果有条件,最好使用最新的版本。 你应该看过 PHP The R...

    supernavy 评论0 收藏0
  • 利用 Composer 步构建自己的 PHP 框架)——基础准备

    摘要:原文发表在我的个人网站利用一步一步构建自己的框架一基础准备一统天下的时代已经到来白岩松一个时代结束了另一个时代开始了。框架可互用性小组,简称,成立于年。 原文发表在我的个人网站 利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备 『Composer 一统天下的时代已经到来!』 ——白岩松 一个时代结束了,另一个时代开始了。 Framework ...

    gougoujiang 评论0 收藏0
  • PHP中对PSR-1、PSR-2规范理解

    摘要:目前已表决通过了套标准,已经得到大部分框架的支持和认可。类中的常量所有字母都必须大写,单词间用下划线分隔方法名称必须符合式的小写开头驼峰命名规范。日志接口规范详见自动加载规范详见缓存接口规范详见消息接口规范详见,暂无中文翻译 PHP-FIG 在说啥是PSR-[0-4]规范的之前,我觉得我们有必要说下它的发明者和规范者:PHP-FIG。就是这个联盟组织发明和创造了PSR-[0-4]规范 ...

    lieeps 评论0 收藏0
  • 途牛原创|大话权限中心的PHP架构之道

    摘要:权限中心的依赖声明声明依赖关系检查代码规范声明开发依赖命名空间检查代码规范,执行单元测试。单元测试持续交付一切都如此的完美,没有测试,又如何可以证明这件事情的完美,又如何可以保障交付的质量。 序 权限管理是无线运营系统中的核心模块,通过访问控制策略的配置,来约定人与资源的访问关系。 本文着重讲解如何通过PHP来构建一个灵活、通用、安全的权限管理系统。 关于权限 首先我们来聊聊权限。 权...

    miracledan 评论0 收藏0

发表评论

0条评论

hqman

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<