PHPCMS 路由资料
来源:互联网 发布:淘宝魔盒有什么用 编辑:程序博客网 时间:2024/06/03 23:06
phpcms v9 二次开发之URL路由配置教程
phpcms v9路由配置文件位置:caches/configs/route.php
我们打开这个配置文件,加入我们的路由配置信息。路由配置信息为二维数组结构,默认为default。
路由配置文件内容是这样的:
return array(
'default'=>array('m'=>'admin', 'c'=>'index', 'a'=>'init'),
'test.youname.com'=>array('m'=>'test', 'c'=>'index', 'a'=>'init'),
);
?>
基中“m”为模型,“c”为控制器,“a”为事件,“data”为其他附加参数。
data为一个二维数组,可设置POST和GET的默认参数。POST和GET分别对应PHP中的$_POST和$_GET两个超全局变量。如下面的例子,在程序中您可以使用$_POST['catid']来得到data下面POST中的数组的值。
data中的所设置的参数等级比较低。如果外部程序有提交相同的名字的变量,将会覆盖配置文件中所设置的值。
return array(
'default'=>array(
'm'=>'phpcms',
'c'=>'index',
'a'=>'init',
'data'=>array(
'POST'=>array(
'catid'=>1
),
'GET'=>array(
'contentid'=>1
)
)
)
)
?>
外部程序POST了一个变量catid=2那么你在程序中使用$_POST取到的值是2,而不是配置文件中所设置的1。
phpcms源码研究之路由模式的解析
phpcms的MCA模式是怎么工作的,在phpcms把MCA这种模式称为路由模式。self::load_sys_class('application'); 进入application.php文件里面。这里我们
$param = pc_base::load_sys_class('param');我们又找到param类,该类的主要作用就是对URL的请求参数进行处理,该类里面有个$route_config成员,它是一个关联数组,通过解析url路径得到路由信息(就是M,C,A),这里用到一个很流行的理论:约定优先于配置,如果路径里面的MCA参数不全默认设置为'default'=>array('m'=>'content', 'c'=>'index', 'a'=>'init'),这里我们明白了为什么index.php和index.hmtl的访问的内容是一样的。
【phpcms-v9】phpcms-v9中url路由规则文件分析:phpcms/libs/classes/param.class.php
<?php
/**
* param.class.php 参数处理类
*
* @copyright (C) 2005-2012 PHPCMS
* @license http://www.phpcms.cn/license/
* @lastmodify 2012-9-17
*/
class param {
//路由配置
private $route_config = '';
public function __construct() {
if(!get_magic_quotes_gpc()) {//如果为开启状态,则会自动在特殊字符前添加反斜线进行转义
$_POST = new_addslashes($_POST);//对$_POST中的特殊字符前添加反斜线进行转义
$_GET = new_addslashes($_GET);//对$_GET中的特殊字符前添加反斜线进行转义
$_REQUEST = new_addslashes($_REQUEST);//对$_REQUEST中的特殊字符前添加反斜线进行转义
$_COOKIE = new_addslashes($_COOKIE);//对$_COOKIE中的特殊字符前添加反斜线进行转义
}
//默认的路由规则:'default'=>array('m'=>'content', 'c'=>'index', 'a'=>'init')
$this->route_config = pc_base::load_config('route', SITE_URL) ? pc_base::load_config('route', SITE_URL) : pc_base::load_config('route', 'default');
//默认情况下不执行下面代码段
if(isset($this->route_config['data']['POST']) && is_array($this->route_config['data']['POST'])) {
foreach($this->route_config['data']['POST'] as $_key => $_value) {
if(!isset($_POST[$_key])) $_POST[$_key] = $_value;
}
}
if(isset($this->route_config['data']['GET']) && is_array($this->route_config['data']['GET'])) {
foreach($this->route_config['data']['GET'] as $_key => $_value) {
if(!isset($_GET[$_key])) $_GET[$_key] = $_value;
}
}
if(isset($_GET['page'])) {
$_GET['page'] = max(intval($_GET['page']),1);
$_GET['page'] = min($_GET['page'],1000000000);
}
return true;//最终返回true
}
/**
* 获取模型
*/
public function route_m() {
$m = isset($_GET['m']) && !empty($_GET['m']) ? $_GET['m'] : (isset($_POST['m']) && !empty($_POST['m']) ? $_POST['m'] : '');
$m = $this->safe_deal($m);
if (empty($m)) {
return $this->route_config['m'];
} else {
if(is_string($m)) return $m;
}
}
/**
* 获取控制器
*/
public function route_c() {
$c = isset($_GET['c']) && !empty($_GET['c']) ? $_GET['c'] : (isset($_POST['c']) && !empty($_POST['c']) ? $_POST['c'] : '');
$c = $this->safe_deal($c);
if (empty($c)) {
return $this->route_config['c'];
} else {
if(is_string($c)) return $c;
}
}
/**
* 获取事件
*/
public function route_a() {
$a = isset($_GET['a']) && !empty($_GET['a']) ? $_GET['a'] : (isset($_POST['a']) && !empty($_POST['a']) ? $_POST['a'] : '');
$a = $this->safe_deal($a);
if (empty($a)) {
return $this->route_config['a'];
} else {
if(is_string($a)) return $a;
}
}
/**
* 设置 cookie
* @param string $var 变量名
* @param string $value 变量值
* @param int $time 过期时间
*/
public static function set_cookie($var, $value = '', $time = 0) {
$time = $time > 0 ? $time : ($value == '' ? SYS_TIME - 3600 : 0);
$s = $_SERVER['SERVER_PORT'] == '443' ? 1 : 0;
$var = pc_base::load_config('system','cookie_pre').$var;
$_COOKIE[$var] = $value;
if (is_array($value)) {
foreach($value as $k=>$v) {
setcookie($var.'['.$k.']', sys_auth($v, 'ENCODE'), $time, pc_base::load_config('system','cookie_path'), pc_base::load_config('system','cookie_domain'), $s);
}
} else {
setcookie($var, sys_auth($value, 'ENCODE'), $time, pc_base::load_config('system','cookie_path'), pc_base::load_config('system','cookie_domain'), $s);
}
}
/**
* 获取通过 set_cookie 设置的 cookie 变量
* @param string $var 变量名
* @param string $default 默认值
* @return mixed 成功则返回cookie 值,否则返回 false
*/
public static function get_cookie($var, $default = '') {
$var = pc_base::load_config('system','cookie_pre').$var;
return isset($_COOKIE[$var]) ? sys_auth($_COOKIE[$var], 'DECODE') : $default;
}
/**
* 安全处理函数
* 处理m,a,c
*/
private function safe_deal($str) {
return str_replace(array('/', '.'), '', $str);
}
}
?>
http://www.jb51.net/cms/173579.html
/phpcms/libs/functions/global.func.php 第351行/** * 语言文件处理 * * @paramstring$language标示符 * @paramarray$pars转义的数组,二维数组 ,'key1'=>'value1','key2'=>'value2', * @paramstring$modules 多个模块之间用半角逗号隔开,如:member,guestbook * @returnstring语言字符 */function L($language = 'no_language', $pars = array(), $modules = '') { static $LANG = array(); static $LANG_MODULES = array(); static $lang = ''; if (defined('IN_ADMIN')) { $lang = SYS_STYLE ? SYS_STYLE : 'zh-cn'; } else { $lang = pc_base::load_config('system', 'lang'); } if (!$LANG) { require_once PC_PATH . 'languages' . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR . 'system.lang.php'; if (defined('IN_ADMIN')) require_once PC_PATH . 'languages' . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR . 'system_menu.lang.php'; if (file_exists(PC_PATH . 'languages' . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR . ROUTE_M . '.lang.php')) require PC_PATH . 'languages' . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR . ROUTE_M . '.lang.php'; } if (!empty($modules)) { $modules = explode(',', $modules); foreach ($modules AS $m) { if (!isset($LANG_MODULES[$m])) require PC_PATH . 'languages' . DIRECTORY_SEPARATOR . $lang . DIRECTORY_SEPARATOR . $m . '.lang.php'; } } if (!array_key_exists($language, $LANG)) { return $LANG['no_language'] . '[' . $language . ']'; } else { $language = $LANG[$language]; if ($pars) { foreach ($pars AS $_k => $_v) { $language = str_replace('{' . $_k . '}', $_v, $language); } } return $language; }}
- PHPCMS 路由资料
- PHPcms --资料
- phpcms URL路由原理
- phpcms 路由配置
- 【phpcms-v9】整理资料
- phpcms路由模式自定义访问路径
- 各種軟体路由资料收集
- linux 路由资料
- 【phpcms-v9】phpcms-v9中url路由规则文件分析:phpcms/libs/classes/param.class.php
- phpcms v9 二次开发之URL路由配置教程
- phpcms
- phpcms
- PHPCMS
- phpcms
- phpcms
- phpcms
- PHPCMS
- PHPCMS
- what is a device drive
- Android 获取控件高度宽度三种方法,防止0的出现
- 第196天
- AFNetworking实现程序重新启动时的断点续传
- java和C常见技术面试题2015(持续更新中。。。)
- PHPCMS 路由资料
- phonegap的安装
- 推荐使用links方法安装插件
- 彩色图像、灰度图像、二值图像
- android应用开发详解(一)--------原始xml文件的使用
- Liferay连接第二个database
- How do I clear my web browser's cache, cookies, and history?
- mysql 批量插入和批量更新的
- GdiPlus/Gdi+ 的Color()和Gdi 的RGB()宏的区别