在Yaf框架开发的项目中使用Yii的方式处理URL链接
来源:互联网 发布:南阳理工网络教学平台 编辑:程序博客网 时间:2024/05/22 14:03
在早起的项目开发中都是先正常开发使用动态地址访问,接近完成时才对链接rewrite处理,这样会有一个坑,那么多页面那么多的链接一个个按照rewrite规则去改真是受够了。自使用Yii框架后这些问题就很容易解决,在控制器中使用 $this->createUrl() 处理也可以覆写父方法重定处理URL方式。
最近使用Yaf开发的项目,于项目启动时就已对URL链接作了规划,使用Yii的方式处理。
由于Yaf中 new Controller 会报Warning,下面这段是在鸟哥的留言板(/guestbook?cp=18)里看到的:
class a extends Yaf_Controller_Abstract{}new a();Warning: Yaf_Controller_Abstract::__construct() expects at least 3 parameters, 0 given in test.php on line 7虽不规范但Warning是一样的,所以干脆绕开这步:
在 /application/library 目录里添加 CUrl 处理类,其中后面两方法是改的Yii的:
<?php/** * Url Generator * * @category * @author Shi Xue * @date 2017-09 */class CUrl{ /** * @var string / | http://xxx.com/ */ private static $baseUrl = '/index.php/'; /** * @var string .html */ private static $urlSuffix = ''; /** * Create URL * 当控制器存在 createUrl() 方法时则优先调用控制器内部的,如果没有则调用默认的 * @param string $route * home (HomeController, Index Action) * home/index (HomeController, Index Action) * m/home/index (M Module, HomeController, Index Action) * @param array $params * @param string $ampersand * @return string */ public static function createUrl($route, $params=array(), $ampersand='&') { $controller = ''; if(strpos($route, '/')){ $routeArr = explode('/', $route); $controller = count($routeArr) > 2 ? ucfirst($routeArr[1]) .'Controller' : ucfirst($routeArr[0]) .'Controller'; }else{ $controller = ucfirst($route) .'Controller'; } if(class_exists($controller) && method_exists($controller, 'createUrl')) return $controller::createUrl($route, $params, $ampersand); //也可配置规则路由实现,避免在多个控制器内添加静态方法 else return self::createUrlDefault($route, $params, $ampersand); } /** * URL * @param string $route * @param array $params * @param string $ampersand * @return string */ public static function createUrlDefault($route, $params=array(), $ampersand='&') { $request = Yaf_Application::app()->getDispatcher()->getRequest(); $route = trim($route,'/'); if($route==='') $route = $request->controller . '/' . $request->action; //elseif(strpos($route, '/')===false) // $route = $request->controller . '/' . $route; /* //下面 createPathInfo 中过滤 param=null 的参数,保留参数可用 param='' foreach($params as $i=>$param) if($param===null) $params[$i]=''; */ if(isset($params['#'])) { $anchor='#'.$params['#']; unset($params['#']); } else $anchor=''; $url = self::$baseUrl . $route . self::$urlSuffix; $pstr = self::createPathInfo($params, '=', $ampersand); if($pstr || $anchor) $url .= '?' . $pstr . $anchor; return $url; } /** * Params * @return string param1=val1¶m2=val2 */ private static function createPathInfo($params, $equal, $ampersand) { $pairs = array(); foreach($params as $k => $v) { if (is_array($v)) $pairs[]=self::createPathInfo($v,$equal,$ampersand); elseif ($v !== null) //else $pairs[]=urlencode($k).$equal.urlencode($v); } return implode($ampersand,$pairs); }}
模板中调用,参数以数组键值对传入:
<a href="<?=CUrl::createUrl('home/index', array('from' => 'listpage')) ?>">首页</a>
如果某个控制器下的链接需要单独处理,可在控制器中添加 createUrl():
class HomeController extends ApplicationController{public function indexAction(){}/** * Create URL * @return string * /baojia/bj.html * /baojia/bj_p1.html * /baojia/bj_12_r0_p1.html */public static function createUrl($route, $params=array(), $ampersand='_'){//默认生成URL方法 //return CUrl::createUrlDefault($route, $params, $ampersand); //自定义 //... //设定参数顺序, 同时排除非需要的参数$setParameter = array('city', 'price', 'sort', 'page');$curl = '/baojia/';$strParam = array();foreach($setParameter as $able){if( isset($params[$able]) && $params[$able] !== null ){switch ($able){case 'sort':$strParam[] = 'r'. $params[$able];break;case 'page':$strParam[] = 'p'. $params[$able];break;default:$strParam[] = $params[$able];}}}if($strParam)$curl .= implode($ampersand, $strParam) .'.html';return $curl;}}
控制器内 createUrl() 的参数需与 CUrl 类的参数一致,否则可能会报 PHP Strict Standards。
阅读全文
0 0
- 在Yaf框架开发的项目中使用Yii的方式处理URL链接
- 在Yii框架中如何使用PathInfo形式的URL
- Yii框架中常用的url
- YII框架开发项目中遇到的问题及解决办法
- Yaf框架在window上的配置
- 在Yaf中使用Zf2的配置和服务管理器
- yii 用到的链接方式
- YAF 框架的皮毛
- yii框架中分页url重写rewrite达到各参数变伪静态链接,即不出现?和&的参数
- JAVA_WEB项目之使用Spring的xml配置方式在项目中管理Lucene检索框架
- 在Yaf中使用Yar
- 在yii的URL中,如何隐藏动态文件夹?
- 混合APP开发的套路(四):在html页面中打开项目中的Activity(url的方式)
- yii框架项目的创建
- yii框架项目的创建
- yaf使用的总结
- url中加号的处理方式
- 在yii中使用memcache的问题
- BeanUtils.copyProperties参数赋值顺序
- JQuery绑定事件
- 考研英语
- 数据结构上机实践第三周项目2
- springMVC 的配置使用
- 在Yaf框架开发的项目中使用Yii的方式处理URL链接
- C/C++中static关键字详解
- Linux服务器之间拷贝文件(提示connect to host localhost port 22: Connection refused lost )
- Thinkphp 不显示异常页面和报错页面的另一个原因
- 浏览器程序设计笔记
- OpenCV2编程手册笔记之 6.5计算图像的拉普拉斯变换
- R-图形的组合
- 有几个PAT?(动态规划?)
- 索引结构(正向索引结构)--fdt和fdx文件