Yii URL 连字符管理
2016-01-18 13:58
627 查看
本文将会介绍一种将 URL
路由 自动断字的方法。
我们指定 Yii 使用
URL manager 来支持创建和解析 URL。然而,默认的方法对于混合词语的
路由 处理的不尽如人意。例如,URL 管理器默认将
这对于 SEO 来讲很不友好。他们想要的是像
规则 中添加如下内容:
这么做很好,但不是最后的办法,因为我们需要为每一个类似的路由指定一个规则。为了避免麻烦和提高性能,我们可以使用一下内容扩展
CUrlManager:
在上面我们定义了一个
CUrlManager 的子类
CUrlManager 中几个属性的默认值来使我们的 URL 更加友好。
现在我们需要在应用的配置文件中做些小改动:
在上面的代码我们指定了
通过以上设置,对于路由
注意: 因为上面的代码中使用了匿名函数和lcfirst(),所以此方法运行在 PHP 5.3 或更高版本
路由 自动断字的方法。
我们指定 Yii 使用
URL manager 来支持创建和解析 URL。然而,默认的方法对于混合词语的
路由 处理的不尽如人意。例如,URL 管理器默认将
createAccount生成为:
/user/createAccount[/code]
这对于 SEO 来讲很不友好。他们想要的是像
user/create-account更具易读性的。为了实现它,我们可以在 URL 管理器的
规则 中添加如下内容:
'user/create-account' => 'user/createAccount'[/code]
这么做很好,但不是最后的办法,因为我们需要为每一个类似的路由指定一个规则。为了避免麻烦和提高性能,我们可以使用一下内容扩展
CUrlManager:
[php] class UrlManager extends CUrlManager { public $showScriptName = false; public $appendParams = false; public $useStrictParsing = true; public $urlSuffix = '/'; public function createUrl($route, $params = array(), $ampersand = '&') { $route = preg_replace_callback('/(?<![A-Z])[A-Z]/', function($matches) { return '-' . lcfirst($matches[0]); }, $route); return parent::createUrl($route, $params, $ampersand); } public function parseUrl($request) { $route = parent::parseUrl($request); return lcfirst(str_replace(' ', '', ucwords(str_replace('-', ' ', $route)))); } }[/code]
在上面我们定义了一个
CUrlManager 的子类
UrlManager。我们主要覆盖了
createUrl()和
parseUrl()方法来实现路由的断字。我们也覆盖了
CUrlManager 中几个属性的默认值来使我们的 URL 更加友好。
现在我们需要在应用的配置文件中做些小改动:
[php] return array( // .... 'components' => array( 'urlManager' => array( 'class' => 'UrlManager', 'rules' => array( // .... '<controller:[\w\-]+>/<action:[\w\-]+>' => '<controller>/<action>', ), ), ), );[/code]
在上面的代码我们指定了
urlManager的类为我们的新类
UrlManager。我们也修改了一点规则,这样我们可以在 URL 中匹配连字符(-)(默认的设置中只匹配单词不匹配连字符)。
通过以上设置,对于路由
user/createAccount我们会获得 URL
/user/create-account/。最后的斜线是因为我们在
UrlManager中设置了
urlSuffix为
/。
注意: 因为上面的代码中使用了匿名函数和lcfirst(),所以此方法运行在 PHP 5.3 或更高版本
相关文章推荐
- Yii 在GridView中使用关联模型进行搜索和排序
- Yii 常量的轻松管理
- Yii 自动设置模型的字段值
- PHP解决抢购、秒杀、抢楼、抽奖等阻塞式高并发库存防控超量的思路方法
- Yii 缓存
- PHP 依赖注入,从此不再考虑加载顺序
- VTP
- PHPDoc 学习记录
- 如何区分InputStream和OutputStream
- ContentProvider往通讯录添加联系人和获取联系人
- PHP垃圾回收机制的理解
- 在yii中显示友好的时间格式
- php 垃圾回收机制 写时复制和引用计数
- PHP开发入门-在线图片搜索
- 函数:PHP将字符串从GBK转换为UTF8字符集iconv
- PHP文字拼音
- Yii应用目录结构
- 40条技巧优化php代码
- php 取某一日期的前一天
- Java和PHP在Web开发方面的比较