这2天休年假,在家宅着学习研究了YAF框架,用YAF做过APP接口的项目,但是没有用来做过WEB方面的应用。趁着这2天在家想把博客用YAF进行一下改版,目的也想进一步学习一下YAF。

  在这过程中遇到不少问题,这里说下YAF路由的问题。

  现在博客的URL规则,使用的也是CI框架的regex路由规则:

  一级栏目:http://www.php230.com/category/

  二级栏目:http://www.php230.com/category/programming-language

  三级栏目:http://www.php230.com/category/web-server/nginx-server/

  文章内容页:http://www.php230.com/nginx-php-fastcgi-path_info.html

  现在通过YAF进行改版,也想保持现有的URL规则不变,所以只能通过YAF的Regex路由规则来实现。

  先来看看YAF手册上对YAF Regex路由规则的介绍:

  

  $route = new Yaf_Route_Regex(

  'product/([a-zA-Z-_0-9]+)',

  array(

  'controller' => 'products',

  'action' => 'view'

  ),

  array(

  //完成数字到字符变量的映射

  1 => 'ident'

  )

  );

  $router->addRoute('product', $route);

  参考资料:http://yaf.laruence.com/manual/yaf.routes.static.html#yaf.routes.regex

  按照手册上的介绍,自己写了相应的规则来对现有URL的实现,但是失败了,最后对规则做了些修改,代码如下:

  public function _initRoute(Yaf_Dispatcher $dispatcher) {

  $router = $dispatcher -> getRouter ();

  $route1 = new Yaf_Route_Regex('([a-zA-Z-_0-9]+.html)',array('controller' => 'content','action' => 'action'),array('1' => 'ident'));

  $router->addRoute('content', $route1);

  $route2 = new Yaf_Route_Regex('(category/[a-zA-Z-_0-9]+)',array('controller' => 'category','action' => 'topCategory'),array('1' => 'ident'));

  $router->addRoute('category1', $route2);

  $route3 = new Yaf_Route_Regex('(category/[a-zA-Z-_0-9]+/[a-zA-Z-_0-9]+/)',array('controller' => 'content','action' => 'subcat'),array('1' => 'ident'));

  $router->addRoute('category2', $route3);

  }

  通过上面的路由规则可以实现URL对控制器的关联,但是获取不到相应的ident变量的值,最后的解决方式是通过

  $_SERVER['REQUEST_URI']

  来处理,基本上可以解决现有的问题,但是总觉得哪里有问题,待会在慢慢研究...(编辑:雷林鹏 来源:网络 侵删)

雷林鹏分享:YAF路由问题的更多相关文章

  1. 雷林鹏分享:CodeIgniter 数据库操作

    在平时项目开发过程中,除了处理那些繁琐的逻辑过程外,还有一个重要的任务就是对数据库的操作处理.这里总结下自己平时使用CI过程中使用的如何对数据库进行操作处理. 在CI框架中,我们一般会把对数据库的操作 ...

  2. 雷林鹏分享:url中加号引发的错误

    刚发现了博客的一个bug,标签页中一些标签带有空格,在url输出中使用了 urlencode 函数进行处理,导致空格被转换成了加号(+),这时通过url访问时会出现错误: 临时解决方法是在urlcod ...

  3. 雷林鹏分享:Composer 安装

    下午在安装 Laravel 框架过程中,遇到了不少问题,因为 Laravel 的安装依赖于 composer,这里就先介绍一下 composer 的安装方法: 安装方法: #下载 sudo curl ...

  4. 雷林鹏分享:Laravel 安装

    前面我们介绍我了 composer安装,这里我们接着来介绍 Laravel框架的安装. 这里我们安装的是laravel 4 项目下载地址:https://github.com/laravel/lara ...

  5. 雷林鹏分享:CodeIgniter常用的数据库操作类

    在 CodeIgniter 中,使用数据库是非常频繁的事情.你可以使用框架自带的数据库类,就能便捷地进行数据库操作. 初始化数据库类 依据你的数据库配置载入并初始化数据库类: $this->lo ...

  6. 雷林鹏分享:jQuery EasyUI 数据网格 - 设置冻结列

    jQuery EasyUI 数据网格 - 设置冻结列 本实例演示如何冻结一些列,当用户在网格上移动水平滚动条时,冻结列不能滚动到视图的外部. 为了冻结列,您需要定义 frozenColumns 属性. ...

  7. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建复杂工具栏

    jQuery EasyUI 数据网格 - 创建复杂工具栏 数据网格(datagrid)的工具栏(toolbar)可以包含按钮及其他组件. 您可以通个一个已存在的 DIV 标签来简单地定义工具栏布局,该 ...

  8. 雷林鹏分享:jQuery EasyUI 数据网格 - 动态改变列

    jQuery EasyUI 数据网格 - 动态改变列 数据网格(DataGrid)列可以使用 'columns' 属性简单地定义.如果您想动态地改变列,那根本没有问题.为了改变列,您可以重新调用dat ...

  9. 雷林鹏分享:jQuery EasyUI 数据网格 - 格式化列

    jQuery EasyUI 数据网格 - 格式化列 以下实例格式化在 easyui DataGrid 里的列数据,并使用自定义列的 formatter,如果价格小于 20 就将文本变为红色. 为了格式 ...

随机推荐

  1. c#中WebApi开发遇到的坑

    一.如何新建一个webApi项目 打开VS→找到解决方案→新建项目→类库或web应用程序→选择空的WebApi项目→在Global.asax文件的Application_Start方法中注册WebAp ...

  2. arcgis for JavaScript API 4.5与4.3的区别

    arcgis 4.5与4.3区别: 鉴于本人使用4.3时间比较久,而arcgis for JavaScript API于9月28日推出了4.5版本,但是直接更换4.5的init.js会出现意想不到的错 ...

  3. Centos7 关于防火墙的一些简单配置

    近期安装了linux系统Centos7,接触下来发现了与原来的Centos6.5有一些差别,这里主要记录下来我的一些关于Centos7防火墙的了解. 一.firewall简介 CentOS 7中防火墙 ...

  4. python导入.py文件

    1.from . import D # 导入A.B.D 2.from .. import E # 导入A.E 3.from ..F import G # 导入A.F.G,.. 和 F是连着的,中间没有 ...

  5. Unity XLua之协程

    如何使用xlua实现协程,示例代码如下: 转载请注明出处:https://www.cnblogs.com/jietian331/p/10735773.html local unpack = unpac ...

  6. logback日志丢失的情况之一

    在游戏服务器上线之后,会记录很多统计日志,这些日志是第三方需要的数据,通过linux 的 rsync方式同步给第三方.日志规则 每十分钟会创建一个日志文件.然后后台有一个rsync进程,每隔十分钟向第 ...

  7. 微信小程序中的rpx与移动设备物理像素

    如下图: pt也称逻辑像素点,px物理像素点,1pt等于2px或者3px或更多; iphone6下面0.5pt=1px=1rpx; 使用rpx,小程序在不同设备分辨率下自行转换: PPI=物理像素开根 ...

  8. 我的python思考

    1.因为例如线性代数之类的数学题较难解决,会耽误我很长时间,所以我希望课程涉及关于数学的库的使用:因为各种考试,例如英语四六级甚至研究生考试各种单词或者关键词都会有使用频率,所以我希望涉及爬虫的应用. ...

  9. Dynamics CRM On-Premise V9安装手记

    下载地址: https://download.microsoft.com/download/A/D/D/ADDD6898-4EFA-46FA-80B6-6FE9A3CDED63/CRM9.0-Serv ...

  10. rabbitMq交换机direct、topics

    一: direct 上面我用采用了广播的模式进行消息的发送,现在我们采用路由的方式对不同的消息进行过滤 发送端代码 public class RoutingSendDirect { private s ...