- 浏览: 1776401 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (641)
- vb2005xu自己动手系列 (174)
- vb2005xu开发文章转摘 (47)
- vb2005xu发发牢骚 (99)
- vb2005xu新技术灌水 (12)
- vb2005xu网络资源集锦 (21)
- vb2005xu软件学习 (60)
- 英语学习 (3)
- JavaScript 学习 (54)
- JAVA OOP 巩固 之 CustomDatabase 的开发 (5)
- 2013年9月之前所在公司 记事 (7)
- FleaPHP/QEEPHP 资料 (87)
- JAVA MAIL 学习篇 (4)
- Python turbogears (5)
- Rails 个人开发四部曲 (3)
- 名人传 (8)
- iwp framework (5)
- 高考零分作文 (5)
- startos (8)
- lua (0)
- 职场 (1)
最新评论
-
hellotieye:
自己 评论 自己 挺嗨呀
Mysql sql查询时 if 的用法 -
igevin:
转载请标明出处,转自Gevin的博客http://blog.i ...
RESTful API 编写指南 -
Theobob:
...
实现简单的ACL -
vb2005xu:
比如 对于 curl 调用就不再需要 加各种if 判断了,
$ ...
搞一个简单的数据打印工具AsDebug の Laravel -
vb2005xu:
http://geekplux.com/wiki/
YII2 模块内自定义错误页
在FLEA/Filter/ 目录下增加一个文件,叫做NamespaceURI.php,里面内容如下:
<?php /** * 增加命名空间支持 -- 将命名空间挂接到控制器名称之前 */ function ___namespace_urlrewrite_filter() { static $firstTime = true; if (!$firstTime) { return; } $firstTime = false; $namespaceAccessor = FLEA::getAppInf('namespaceAccessor','namespace') ; $controllerAccessor = FLEA::getAppInf('controllerAccessor') ; $actionAccessor = FLEA::getAppInf('actionAccessor') ; $defaultNamespace = strtolower(FLEA::getAppInf('defaultNamespace','default')) ; $_ = FLEA::getAppInf('namespaces',array('default' =>'') ) ; foreach ($_ as $k=>$v) { $namespaces[trim(strtolower($k))] = trim($v) ; } $pathinfo = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (!empty($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : ''); $parts = explode('/', substr($pathinfo, 1)); // 初始化变量 $namespace = $defaultNamespace ; $controllerName = $actionName = null ; // 如果是重写的url,pathinfo 则有值,标准URI的话,pathinfo取不到值 if (isset($parts[0]) && strlen($parts[0])) { // 查找命名空间和命名空间对应的控制器前缀部分 $test = trim(strtolower($parts[0])) ; foreach ($namespaces as $namespaceName=>$namespaceValue){ if ($test == $namespaceName){ $namespace = $namespaceName ; break ; } } if ($namespace == $defaultNamespace){ $controllerName = trim($parts[0]) ; if (isset($parts[1]) && strlen($parts[1])) $actionName = trim($parts[1]) ; $start = 2 ; }else { if (isset($parts[1]) && strlen($parts[1])) $controllerName = trim($parts[1]) ; if (isset($parts[2]) && strlen($parts[2])) $actionName = trim($parts[2]) ; $start = 3 ; } $style = FLEA::getAppInf('urlParameterPairStyle'); if ($style == '/') { for ($i = $start; $i < count($parts); $i += 2) { if (isset($parts[$i + 1])) { $_GET[$parts[$i]] = $parts[$i + 1]; } } } else { for ($i = $start; $i < count($parts); $i++) { $p = $parts[$i]; $arr = explode($style, $p); if (isset($arr[1])) { $_GET[$arr[0]] = $arr[1]; } } } } // 设置最后的命名空间/控制器/Action的值 if (isset($_GET[$namespaceAccessor]) && strlen($_GET[$namespaceAccessor])){ $ns = trim(strtolower($_GET[$namespaceAccessor])) ; if ( isset($namespaces[$ns]) ) $namespace = $ns ; } $_GET[$namespaceAccessor] = $namespace ; if (isset($_GET[$controllerAccessor]) && strlen($_GET[$controllerAccessor])){ $controllerName = $_GET[$controllerAccessor] ; } $controllerName = $controllerName ? $controllerName : FLEA::getAppInf('defaultController') ; $prefix = strlen($namespaces[$namespace]) ? "{$namespaces[$namespace]}_" : '' ; $_GET[$controllerAccessor] = $prefix . ucwords($controllerName) ; if (isset($_GET[$actionAccessor]) && strlen($_GET[$actionAccessor])){ $actionName = $_GET[$actionAccessor] ; } $_GET[$actionAccessor] = $actionName ? $actionName : FLEA::getAppInf('defaultAction') ; FLEA::setAppInf('namespaceAccessor',$namespaceAccessor) ; FLEA::setAppInf('defaultNamespace',$defaultNamespace) ; FLEA::setAppInf('namespaces',$namespaces) ; FLEA::setAppInf($namespaceAccessor,$namespace) ; // 将 $_GET 合并到 $_REQUEST, // 有时需要使用 $_REQUEST 统一处理 url 中的 id=? 这样的参数 $_REQUEST = array_merge($_REQUEST, $_GET); } /** * 增加命名空间支持 -- 将命名空间挂接到控制器名称之前 */ function ___namespace_urlstandard_filter() { static $firstTime = true; if (!$firstTime) { return; } $firstTime = false; $namespaceAccessor = FLEA::getAppInf('namespaceAccessor','namespace') ; $controllerAccessor = FLEA::getAppInf('controllerAccessor') ; $actionAccessor = FLEA::getAppInf('actionAccessor') ; $defaultNamespace = strtolower(FLEA::getAppInf('defaultNamespace','default')) ; $_ = FLEA::getAppInf('namespaces',array('default' =>'') ) ; foreach ($_ as $k=>$v) { $namespaces[trim(strtolower($k))] = trim($v) ; } // 初始化变量 $namespace = $defaultNamespace ; $controllerName = $actionName = null ; // 设置最后的命名空间/控制器/Action的值 if (isset($_GET[$namespaceAccessor]) && strlen($_GET[$namespaceAccessor])){ $ns = trim(strtolower($_GET[$namespaceAccessor])) ; if ( isset($namespaces[$ns]) ) $namespace = $ns ; } $_GET[$namespaceAccessor] = $namespace ; if (isset($_GET[$controllerAccessor]) && strlen($_GET[$controllerAccessor])){ $controllerName = $_GET[$controllerAccessor] ; } $controllerName = $controllerName ? $controllerName : FLEA::getAppInf('defaultController') ; $prefix = strlen($namespaces[$namespace]) ? "{$namespaces[$namespace]}_" : '' ; $_GET[$controllerAccessor] = $prefix . ucwords($controllerName) ; if (isset($_GET[$actionAccessor]) && strlen($_GET[$actionAccessor])){ $actionName = $_GET[$actionAccessor] ; } $_GET[$actionAccessor] = $actionName ? $actionName : FLEA::getAppInf('defaultAction') ; FLEA::setAppInf('namespaceAccessor',$namespaceAccessor) ; FLEA::setAppInf('defaultNamespace',$defaultNamespace) ; FLEA::setAppInf('namespaces',$namespaces) ; FLEA::setAppInf($namespaceAccessor,$namespace) ; // 将 $_GET 合并到 $_REQUEST, // 有时需要使用 $_REQUEST 统一处理 url 中的 id=? 这样的参数 $_REQUEST = array_merge($_REQUEST, $_GET); } /** * 增加命名空间支持 -- 将控制器名称转化成 命名空间/控制器名称 * * @return string */ function ___namespaceToURI($controllerName=null,$isUrlRewrite=true) { if (!$controllerName) return '' ; $controllerName = trim(strtolower($controllerName)) ; $defaultNamespace = FLEA::getAppInf('defaultNamespace') ; $namespace = $defaultNamespace ; $namespaces = FLEA::getAppInf('namespaces') ; foreach ($namespaces as $key=>$val){ if (!empty($val)){ $val = strtolower($val) . '_'; if (preg_match("/^{$val}*/i",$controllerName)){ $namespace = $key ; $controllerName = preg_replace("/^{$val}*/i",'',$controllerName); break ; } } } if ($isUrlRewrite){ return $namespace == $defaultNamespace ? '/' . rawurlencode($controllerName) : sprintf('/%s/%s',rawurlencode($namespace),rawurlencode($controllerName)) ; }else { return $namespace == $defaultNamespace ? FLEA::getAppInf('controllerAccessor') . '=' . rawurlencode($controllerName) : sprintf("%s=%s&%s=%s", FLEA::getAppInf('namespaceAccessor'),rawurlencode($namespace) , FLEA::getAppInf('controllerAccessor'),rawurlencode($controllerName)) ; } } if (FLEA::getAppInf('urlMode') != URL_STANDARD) { ___namespace_urlrewrite_filter() ; }else { ___namespace_urlstandard_filter(); }
修改 FLEA.php 文件中的几行:
找到: 并注释掉
// 根据 URL 模式设置,决定是否要载入 URL 分析过滤器 // if (FLEA::getAppInf('urlMode') != URL_STANDARD) { // require(FLEA_DIR . '/Filter/Uri.php'); // }
增加一行: require(FLEA_DIR . '/Filter/NamespaceURI.php');
修改url方法里面的代码:
找到 : // PATHINFO 和 REWRITE 模式 注释处,在下面继续找到 $url .= '/' . rawurlencode($controllerName);
将其注释掉,加上一行 $url .= ___namespaceToURI($controllerName,true);
找到 : // 标准模式 注释处,在下面继续找到:
if ($controllerName != $defaultController && !is_null($controllerName)) {
// $url .= $parajoin . rawurlencode($controllerName); @注释掉这里的代码
// 修改为:
$url .= $parajoin . ___namespaceToURI($controllerName,false);
}
此时全部修改完成,在 项目的配置文件中加入:
'namespaces' => array( 'blog' => 'Blog' , 'default' => '' , ) ,
从浏览器访问: /blog/news/list/page/3/cat/internet
则会 自动定位到 url('Blog_News','list',array('page'=>3,'cat'=>'internet'))
发表评论
-
ws-http 最简单轻量的PHP CURL工具库
2016-07-29 20:44 2616欢迎大家拍砖 https://github.com/to ... -
Facade 包装类 -- 解决视图里面长长的命名空间调用问题
2016-04-20 10:48 1744有时候模版里面定义 ... -
PHP单例模式面试注意事项
2015-10-20 09:57 1950最近面了不少PHP从业者,有实习生也有5/6年以上的开发者 ... -
NGINX 配置 SSL 证书 搭建 HTTPS 网站
2015-10-19 19:19 2915下面是详细的配置过程: 1、在服务器上使用 Open ... -
关于php cron任务管理的实现假想
2015-10-17 21:25 1895之前每开发一个计划任务功能均需要在线上操作crontab来新 ... -
修改一些PHP工具
2014-10-24 19:27 1798原来的代码 在非框架下是木有问题的,但是用在框架下就报错, ... -
sublime text linux上中文输入问题的终极解决方案
2014-10-13 11:07 8562我一直在使用sublime text ... -
qeephp3.0 发布了
2014-10-07 17:21 1698QeePHP 是一个快速、灵活的开发框架。应用各种成熟的架构 ... -
swiftmailer 的快捷助手 qser-mailer
2014-09-09 23:52 3591近日在对charsen的修改版上进行了再次的修改与调整,对 ... -
PHP 中简单的伪造IP刷票实现
2014-05-15 17:06 2754一般而言,我们的获取用户真实ip的代码大致是这样... / ... -
PHP5.5 htmlspecialchars 返回null的坑
2014-04-25 12:23 2610昨天在写 PDO数据库封装类的 测试代码时遇到这个问题,取 ... -
PHP 5.5 empty + 魔术变量 的坑
2014-04-16 15:53 1597今天在测试代码时遇到这么一个疑问? dump((in ... -
Aert_Log: 设计一个精简易用的日志
2014-04-13 18:28 2478日志记录对于应用的 ... -
创建一个简单的短链服务类
2013-07-01 18:20 1359整理一个简单的短链算法,整理到自己的代码库中: &l ... -
收集常用的PHP简单代码
2013-06-30 17:53 2053对于日常工作中整理出来的某些功能做个简单梳理: 1 ... -
简易PHP路由,支持正反向url解析支持
2013-06-21 22:23 8226几年前实现了一个简单的正向路由,那时候不会写反向路由解析, ... -
系统学习のCACHE 学习
2012-11-21 13:58 1904http://www.phpfans.net/article/ ... -
YY 下 sql查询封装类 不知道好不好使
2012-07-18 16:44 1331<?php class Pkg_Db_Actor { ... -
生成后台管理菜单 admin_menu 类
2012-05-05 18:27 4644<?php /** * 管理菜单 * */ ... -
抽取个sql生成器工具 -- 摘自 fuelphp1.1 版本
2012-04-25 20:17 1225<?php /** * Sql 创造者类 * ...
相关推荐
Fleaphp的视图系统支持模板引擎,允许开发者使用模板语言编写动态视图,提高代码可读性和维护性。 5. **数据库操作**:Fleaphp提供了数据库抽象层,支持多种数据库如MySQL、SQLite、PostgreSQL等。它使用ORM(对象...
4. **数据库支持**:Fleaphp通常支持多种数据库,如MySQL、SQLite等,通过简单的API进行数据操作,如CRUD(创建、读取、更新、删除)操作,以及更复杂的查询构建。 5. **模板引擎**:框架内可能包含一个模板引擎,...
7. **缓存机制**:为了提高性能,FleaPHP支持多种缓存策略,如文件缓存、内存缓存(如APC),可以有效减少数据库访问。 8. **安全防护**:框架内置了一些安全措施,如防止SQL注入、XSS攻击,确保应用的安全性。 9....
Fleaphp支持中间件,这是一种处理请求和响应的组件,可以用于实现如认证、日志记录、限速等功能。中间件可以按需堆叠,提供灵活的请求处理流程。 七、配置(Configuration) Fleaphp的配置文件允许开发者自定义框架的...
作为一款优秀的框架,Fleaphp旨在提供高效、简洁且易于上手的开发工具,帮助开发者快速构建Web应用。下面将详细介绍Fleaphp的主要特点、核心组件以及如何使用它进行开发。 1. **主要特点** - **轻量级**:Fleaphp...
Fleaphp支持中间件,这是一种强大的功能,可以在请求到达控制器之前或之后执行额外的处理。例如,你可以创建一个登录检查中间件,确保只有已登录用户才能访问特定的控制器方法。 7. **错误处理与日志记录** ...
fleaphp.chm手册
4. **数据库支持**:FleaPHP提供了数据库抽象层,支持多种数据库系统如MySQL、SQLite、PostgreSQL等,通过统一的API进行数据操作,降低了数据库迁移的难度。 5. **模板引擎**:内置模板引擎,支持动态变量、控制...
2. **路由系统**:Fleaphp的路由机制允许开发者灵活定义URL到控制器和方法的映射,支持参数传递,实现URL美化和更高效地处理HTTP请求。 3. **控制器(Controller)**:控制器是MVC模式中的关键组件,负责接收用户请求...
fleaphp框架,国产最好php开发框架
FleaPHP chm文档,简单实例,框架流程介绍
路由可以是预定义的,也可以动态生成,以支持RESTful API或其他高级路由策略。 5. **执行控制器**:找到对应的控制器后,FleaPHP会调用其方法来处理业务逻辑。控制器可以操作模型数据,进行业务处理,并调用视图来...
在FleaPHP开源应用程序开发框架中,有几个关键的系统方法,它们是开发高效Web应用的基础。下面我们将详细探讨这些方法: 1. **FLEA::initWebControls()**: 这个函数用于初始化WebControls,它返回一个`FLEA_...
最后,FleaPHP支持Composer包管理器,这意味着您可以轻松地引入第三方库来扩展框架的功能,比如添加验证码、邮件发送、支付接口等。 总的来说,FleaPHP框架为PHP开发者提供了一个轻便而功能齐全的工具集,适合快速...
- 命名规范和目录结构介绍。 - 应用程序设置详解。 - 数据库访问方法。 2. **MVC模式篇** - MVC模式基础理论。 - FleaPHP的MVC模式特色分析。 - 构建基本的MVC应用程序步骤。 3. **数据库操作篇** - ...
- 文章未提供具体细节,但通常FleaPHP会有明确的命名规范和目录结构以支持MVC架构。 - **可能包括**: - 控制器、模型、视图的命名规则。 - 目录结构如`controllers/`, `models/`, `views/`等。 #### 五、应用程序...
`FLEAPHP手册1.chm`为开发者提供了框架的使用指南,包括路由设定、模型构建、视图渲染、控制器操作等,有助于快速理解和应用这个框架。 【Smarty】:Smarty是一个PHP模板引擎,将业务逻辑和显示模板分离,提高代码...
- 数据访问层(Data Gateway):在MVC架构中,数据访问层封装了与数据库交互的所有细节,Fleaphp框架使用TableDataGateway类来实现这一点,支持CRUD(创建、读取、更新、删除)操作。 - 视图渲染:框架支持Smarty...
【fleaphp AJAX Login 实例详解】 在Web开发中,用户登录是常见的功能,而AJAX(Asynchronous JavaScript and XML)技术的应用使得用户交互更加流畅,无需刷新页面即可完成登录操作。本实例将深入探讨如何使用...