基于PSR-0编码规范开发一套PHP-MVC框架(一)
一、入口文件。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框架(一)相关推荐
- 基于PSR-0编码规范开发一套PHP-MVC框架(二)
一.composer依赖包管理工具.composer.json {"name":"PHP-FRAME","author":"Guo ...
- 基于springboot+redis+bootstrap+mysql开发一套属于自己的分布式springcloud云权限架构(七)【权限架构生产者(数据字典)】
在我们的编码中我们经常会存放一些静态常量,而这些静态变量我们通常都是写死的,如果我们需要改变这些静态变量的值那么我们必须要修改代码,并重新发布程序,这很明显很不符合我们现实中的业务场景,我们现实中的业 ...
- 基于Tomcat5.0和Axis2开发Web Service代码详解
本文将详细介绍HelloWorld中使用的server和client端代码.阅读之前,你应该首先了解SOAP1.1协议.<?xml:namespace prefix = o ns = " ...
- 基于Tomcat5.0和Axis2开发Web Service应用实例
本文将介绍如何使用Tomcat5.0和Apache Axis2开发.部署及测试一个简单的Web Service应用.<?xml:namespace prefix = o ns = "u ...
- 开发自己的PHP MVC框架(一)
这个教程能够使大家掌握用mvc模式开发php应用的基本概念.此教程分为三个部分.如今这篇是第一部分. 如今市面上有非常多流行的框架供大家使用.可是我们也能够自己动手开发一个mvc框架.採用mvc模式能 ...
- vim php psr,PHP编码规范(PSR-1)-基本代码规范
PSR-1 基本代码规范 1. 概况 代码文件必须以<?php或 <?= 标签开始 代码文件必须以不带BOM头的 UTF-8 编码 代码文件中应该只定义类(class).函数(functi ...
- iQQ 基于WebQQ3.0协议Java开发 跨平台QQ客户端
iQQ 使用Java语言跨平台开发,基于腾讯WebQQ 3.0网络协议.可以使用于Java所支持的各种平台上运行.作者基于Linux(Ubuntu 12.04)系统,使用IDE NetBeans?开发 ...
- java iqq_iQQ 基于WebQQ3.0协议Java开发 跨平台QQ客户端
iQQ 使用Java语言跨平台开发,基于腾讯WebQQ 3.0网络协议.可以使用于Java所支持的各种平台上运行.作者基于Linux(Ubuntu 12.04)系统,使用IDE NetBeans?开发 ...
- 基于ASP.Net Core开发的一套通用后台框架
基于ASP.Net Core开发一套通用后台框架 写在前面 这是本人在学习的过程中搭建学习的框架,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 知其然,知其所以然,并非重 ...
最新文章
- 公开分布式高性能查询的源代码和部署方案(一)
- 从传统运维到云运维演进历程之软件定义存储(五)上
- 卷积、相关(matlab)
- matlab矩阵按坐标取,在Matlab中获取inlier点的坐标(Get coordinates of inlier points in Matlab)...
- Android代码片段:设备信息
- [ js处理表单 ]:保存、提交
- 公司java框架让程序员变笨_框架会使程序员变笨吗?
- 原生JS那些事:原生JS添加和删除class类名
- sql azure 语法_深入了解Azure Data Studio:扩展和Azure SQL DB开发
- 类模板使用示例(二)类模板整体特化
- matlab修改证件照背景颜色
- Abel逆变换的MATLAB实现(未完成版)
- requestSubscribeMessage:fail can only be invoked by user TAP gesture 微信小程序调起订阅消息失败
- 服务器Linux环境下安装Matlab2018b
- Gitea服务搭建指南
- 影视后期制作学习第四天(AE)
- markdown 做图 : Mermaid语法
- 无盘服务器0x00000124,蓝屏0x00000124,懂的帮我一下
- Linux性能优化:性能优化工具
- C语言编程打印出“水仙花数”
热门文章
- python电脑版微信-python如何实现远程控制电脑(结合微信)
- python数据分析视频网盘-微专业Python数据分析实战
- python就业方向有哪些-Python如何零基础入门?就业方向有哪些?
- 电脑上如何下载python-如何下载python并正确安装
- python3-Python3 数字(Number)
- python3菜鸟教程中文-Python3 字符串
- pycharm如何在程序运行后查看变量的值,变量的类型(不通过print和debug的方式)
- 使用conda报错:from conda.cli import main ModuleNotFoundError: No module named conda
- UVa 12012 - Detection of Extraterrestrial(hash)
- 题目1550:分糖果