一、入口文件。index.php

<?php
header('Content-type:text/html;charset=utf-8');
date_default_timezone_set('PRC');
require_once(__DIR__.'/configs/Website.php');
require_once(__DIR__.'/frame/Common/Function.php');
require_once(__DIR__.'/frame/App.php');
spl_autoload_register('frame\App::autoload');
frame\App::run();
?>

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

<?php
define('BASEPATH',dirname(dirname(__FILE__)));
define('APP',BASEPATH.'/app');
define('CTRL',BASEPATH.'/app/Controllers');
define('CTRLNAMESPACE','app\Controllers\\');
define('DEBUG',TRUE);

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

<?php
/*
*    路由结构
*    array(
*       '命名空间'=>array(
*           '路由别名'=>'控制器@方法'
*       )
*   )
*/
return array('Home'=>array('index-index'=>'IndexController@index','index/test'=>'IndexController@test',),'Admin'=>array('login'=>'IndexController@login'),);

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

<?php
namespace frame;
use frame\Libs\Route;class App
{//加载控制器文件执行方法static public function run(){$route = new Route();$ctrl = $route->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

<?php
namespace frame\Libs;
class Config
{static $configs = [];/**    $file : 文件名*    $name : 键名*    $flag : 获取全部选项*/static public function get($file,$name,$flag = false){if(isset(self::$configs[$file])) {return $flag ? self::$configs[$file] : self::$configs[$file][$name];} else {$filename = BASEPATH.'/configs/'.ucfirst($file).'.php';if(is_file($filename)) {$config = require_once($filename);$flag ? self::$configs[$file] = $config : self::$configs[$file] = $config[$name];return $flag ? $config : $config[$name];} else {throw new \Exception($filename."配置文件不存在", 1);}}}
}

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

<?php
namespace frame\Libs;
use frame\Libs\Config;class Route
{public $ctrl;public $action;public $namespace;public function __construct(){$uri = $_SERVER['REQUEST_URI'];if(isset($uri) && $uri != '/') {$path = explode('?', trim($uri,'/'));$isExists = $this->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

<?php
namespace app\Controllers;
class WelcomeController
{public function index(){echo ("<h1>Hello,World</h1>欢迎使用PHP-FRAME框架");}
}

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

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>Options -MultiViews
</IfModule>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}]
</IfModule>

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

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

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

    一.composer依赖包管理工具.composer.json {"name":"PHP-FRAME","author":"Guo ...

  2. 基于springboot+redis+bootstrap+mysql开发一套属于自己的分布式springcloud云权限架构(七)【权限架构生产者(数据字典)】

    在我们的编码中我们经常会存放一些静态常量,而这些静态变量我们通常都是写死的,如果我们需要改变这些静态变量的值那么我们必须要修改代码,并重新发布程序,这很明显很不符合我们现实中的业务场景,我们现实中的业 ...

  3. 基于Tomcat5.0和Axis2开发Web Service代码详解

    本文将详细介绍HelloWorld中使用的server和client端代码.阅读之前,你应该首先了解SOAP1.1协议.<?xml:namespace prefix = o ns = " ...

  4. 基于Tomcat5.0和Axis2开发Web Service应用实例

    本文将介绍如何使用Tomcat5.0和Apache Axis2开发.部署及测试一个简单的Web Service应用.<?xml:namespace prefix = o ns = "u ...

  5. 开发自己的PHP MVC框架(一)

    这个教程能够使大家掌握用mvc模式开发php应用的基本概念.此教程分为三个部分.如今这篇是第一部分. 如今市面上有非常多流行的框架供大家使用.可是我们也能够自己动手开发一个mvc框架.採用mvc模式能 ...

  6. vim php psr,PHP编码规范(PSR-1)-基本代码规范

    PSR-1 基本代码规范 1. 概况 代码文件必须以<?php或 <?= 标签开始 代码文件必须以不带BOM头的 UTF-8 编码 代码文件中应该只定义类(class).函数(functi ...

  7. iQQ 基于WebQQ3.0协议Java开发 跨平台QQ客户端

    iQQ 使用Java语言跨平台开发,基于腾讯WebQQ 3.0网络协议.可以使用于Java所支持的各种平台上运行.作者基于Linux(Ubuntu 12.04)系统,使用IDE NetBeans?开发 ...

  8. java iqq_iQQ 基于WebQQ3.0协议Java开发 跨平台QQ客户端

    iQQ 使用Java语言跨平台开发,基于腾讯WebQQ 3.0网络协议.可以使用于Java所支持的各种平台上运行.作者基于Linux(Ubuntu 12.04)系统,使用IDE NetBeans?开发 ...

  9. 基于ASP.Net Core开发的一套通用后台框架

    基于ASP.Net Core开发一套通用后台框架 写在前面 这是本人在学习的过程中搭建学习的框架,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 知其然,知其所以然,并非重 ...

最新文章

  1. 公开分布式高性能查询的源代码和部署方案(一)
  2. 从传统运维到云运维演进历程之软件定义存储(五)上
  3. 卷积、相关(matlab)
  4. matlab矩阵按坐标取,在Matlab中获取inlier点的坐标(Get coordinates of inlier points in Matlab)...
  5. Android代码片段:设备信息
  6. [ js处理表单 ]:保存、提交
  7. 公司java框架让程序员变笨_框架会使程序员变笨吗?
  8. 原生JS那些事:原生JS添加和删除class类名
  9. sql azure 语法_深入了解Azure Data Studio:扩展和Azure SQL DB开发
  10. 类模板使用示例(二)类模板整体特化
  11. matlab修改证件照背景颜色
  12. Abel逆变换的MATLAB实现(未完成版)
  13. requestSubscribeMessage:fail can only be invoked by user TAP gesture 微信小程序调起订阅消息失败
  14. 服务器Linux环境下安装Matlab2018b
  15. Gitea服务搭建指南
  16. 影视后期制作学习第四天(AE)
  17. markdown 做图 : Mermaid语法
  18. 无盘服务器0x00000124,蓝屏0x00000124,懂的帮我一下
  19. Linux性能优化:性能优化工具
  20. C语言编程打印出“水仙花数”

热门文章

  1. python电脑版微信-python如何实现远程控制电脑(结合微信)
  2. python数据分析视频网盘-微专业Python数据分析实战
  3. python就业方向有哪些-Python如何零基础入门?就业方向有哪些?
  4. 电脑上如何下载python-如何下载python并正确安装
  5. python3-Python3 数字(Number)
  6. python3菜鸟教程中文-Python3 字符串
  7. pycharm如何在程序运行后查看变量的值,变量的类型(不通过print和debug的方式)
  8. 使用conda报错:from conda.cli import main ModuleNotFoundError: No module named conda
  9. UVa 12012 - Detection of Extraterrestrial(hash)
  10. 题目1550:分糖果