【旧代码整理】uri路由处理部分

本文介绍了一个简单的PHP MVC框架中URI路由处理的过程。通过解析请求URI,确定控制器、动作及参数,进而调用相应的控制器文件执行指定的动作。

一个简单的php mvc框架 的 代码说明,uri路由处理 部分:

/project/application_www/public/index.php

接收到 除静态文件外的 所有请求,然后 requeire application_admin/init.php 和 /project/init.php 和 /project/run.php


<?php
define('PUBLIC_PATH',dirname(__file__));
require  '../init.php';
require APPLICATION_PATH . '/../run.php';
?>

requeire application_admin/init.php 

看上去很简单。这里是放局部的初始化配置信息是,但是暂无东西配置,直接require最高级 init.php了

<?php
define('APPLICATION_PATH',dirname(__file__));
require APPLICATION_PATH . '/../init.php';

/project/run.php

run.php 负责根据 uri 解析出 controller 和 action 、以及params,然后调用对应/project/controller/目录中的contrller class文件,执行action。

<?php
$uri = $_SERVER['REQUEST_URI'];

$_SGLOBAL = array();

$route = Model_Route::get($uri);

if(empty($route['controller'])){
	_Error_404();
	exit;
}
else{
	$_SGLOBAL['controller'] = $route['controller'];
	$_SGLOBAL['action'] = $route['action'];
	if(isset($route['params'])){
		$_SGLOBAL['params'] = $route['params'];
	}
}

$file = APPLICATION_PATH . '/controller/' . $_SGLOBAL['controller'] . '.php';

if(file_exists($file)){
	require $file;
}
else{
	echo "file not found:{$file}";die();
	_Error_404();	
}

$class = "Controller_{$_SGLOBAL['controller']}";

$action = "action_{$_SGLOBAL['action']}";

$obj = new $class;

$obj->$action();


/project/application_www/route.php

uri 的路由配置文件;

<?php
$_route = array(
	"index_index" => array(
		'url' => '/',
		'controller' => 'index',
		'action' => 'index',
	),
	"user_login" => array(
		'url' => '/login',
		'controller' => 'user',
		'action' => 'login',
	),
	"user_logout" => array(
		'url' => '/logout',
		'controller' => 'user',
		'action' => 'logout',
	),
	"user_setting" => array(
		'url' => '/user_setting/<act>(-<uid>)',
		'controller' => 'user',
		'action' => 'setting',
		'params' => array(
			'default' => array('act'=>'view','uid'=>0),
			'pattern' => array('act'=>'\w+','uid'=>'\d+'),
		),
	),
?>

给route举个栗子:

浏览器访问 http://www.domain.com/user_setting/view/1001 时,nginx将除静态和图片文件以外的所有request发到/project/application_www/public/index.php

1、index.php 接收到请求,加载init.php 和 run.php

2、init.php 初始化必要的基本配置后,run.php开始解析uri,调用controller的action user.php 的 method:setting(),并且传入参数act=view,uid=1001,

   run.php解析的参数,可以由/project/library/function.php 的 function _get() 取得

   /project/run.php 的 Model_Route::get($uri) class,位于 /project/model/route.php[点我]



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值