YII使用url组件美化管理的方法


Posted in PHP onDecember 28, 2015

本文实例讲述了YII使用url组件美化管理的方法。分享给大家供大家参考,具体如下:

urlManager组件

yii的官方文档对此的解释如下:

urlSuffix  此规则使用的url后缀,默认使用CurlManger::urlSuffix,值为null。例如可以将此设置为.html,让url看起来“像”是一个静态页面。
caseSensitive  是否大小写敏感,默认使用CUrlManager::caseSensitive,值为null。
defaultParams  该规则使用的默认get参数。当使用该规则来解析一个请求时,这个参数的值会被注入到$_GET参数中。
matchValue  当创建一个URL时,GET参数是否匹配相应的子模式。默认使用CurlManager::matchValue,值为null。

如果该属性为 false,那么意味着当路由和参数名匹配给定的规则时,将以此来创建一个URL。

如果该属性为true,那么给定的参数值夜必须匹配相应的参数子模式。

注意:将此属性设置为true会降低性能。

我们使用一些例子来解释网址工作规则。我们假设我们的规则包括如下三个:

array(
  'posts'=>'post/list',
  'post/<id:\d+>'=>'post/read',
  'post/<year:\d{4}>/<title>'=>'post/read',
)

调用$this->createUrl('post/list')生成/index.php/posts。第一个规则适用。

调用$this->createUrl('post/read',array('id'=>100))生成/index.php/post/100。第二个规则适用。

调用$this->createUrl('post/read',array('year'=>2008,'title'=>'a sample post'))生成/index.php/post/2008/a%20sample%20post。第三个规则适用。

调用$this->createUrl('post/read')产生/index.php/post/read。请注意,没有规则适用。

总之,当使用createUrl生成网址,路线和传递给该方法的GET参数被用来决定哪些网址规则适用。如果关联规则中的每个参数可以在GET参数找到的,将被传递给createUrl ,如果路线的规则也匹配路线参数,规则将用来生成网址。

如果GET参数传递到createUrl是以上所要求的一项规则,其他参数将出现在查询字符串。例如,如果我们调用$this->createUrl('post/read',array('id'=>100,'year'=>2008)) ,我们将获得/index.php/post/100?year=2008。为了使这些额外参数出现在路径信息的一部分,我们应该给规则附加/* 。 因此,该规则post/<id:\d+>/* ,我们可以获取网址/index.php/post/100/year/2008 。

正如我们提到的,URL规则的其他用途是解析请求网址。当然,这是URL生成的一个逆过程。例如, 当用户请求/index.php/post/100 ,上面例子的第二个规则将适用来解析路线post/read和GET参数array('id'=>100) (可通过$_GET获得) 。

提示:此网址通过createurl方法所产生的是一个相对地址。为了得到一个绝对的url ,我们可以用前缀yii: :app()->hostInfo ,或调用createAbsoluteUrl 。

注:使用的URL规则将降低应用的性能。这是因为当解析请求的URL ,[ CUrlManager ]尝试使用每个规则来匹配它,直到某个规则可以适用。因此,高流量网站应用应尽量减少其使用的URL规则。

test.com/vthot 想生成 test.com/vthot/

'urlSuffix'=>'/',

要更改URL格式,我们应该配置urlManager应用元件,以便createUrl可以自动切换到新格式和应用程序可以正确理解新的网址:
'urlManager'=>array(
  'urlFormat'=>'path',
  'showScriptName'=>false,
  'urlSuffix'=>'.html',
  'rules'=>array(
    'posts'=>'post/list',
    'post/<id:\d+>'=>array('post/show','urlSuffix'=>'.html'),
    'post/<id:\d+>/<mid:\w+>'=>array('post/view','urlSuffix'=>'.xml'),
  ),
),

示例一

Rule代码

'posts'=>'post/list',

Action代码
echo $this->createAbsoluteUrl('post/list');

输出

http://localhost/test/index.php/post

示例二

Rule代码

'post/<id:\d+>'=>array('post/show','urlSuffix'=>'.html'),

Action代码
echo $this->createAbsoluteUrl('post/show',array('id'=>998, 'name'=>'123'));

输出

http://localhost/test/index.php/post/998.html?name=123

示例三

Rule代码:

'post/<id:\d+>/<mid:\w+>'=>array('post/view','urlSuffix'=>'.xml'),

Action代码

echo $this->createAbsoluteUrl('post/view',array('id'=>998, 'mid'=>'tody'));

输出

http://localhost/test/index.php/post/998/tody.xml

示例四

Rule代码

'http://<user:\w+>.vt.com/<_c:(look|seek)>'=>array('<_c>/host','urlSuffix'=>'.me'),

Action代码:

echo $this->createAbsoluteUrl('look/host',array('user'=>'boy','mid'=>'ny-01'));
echo '';
echo $this->createAbsoluteUrl('looks/host',array('user'=>'boy','mid'=>'ny-01'));

输出

http://boy.vt.com/look.me?mid=ny-01
http://localhost/test/index.php/looks/host/user/boy/mid/ny-01

1)controller/Update/id/23

public function actionUpdate(){
  $id = Yii::app()->request->getQuery('id') ; 经过处理的$_GET['id']
}
//$id = Yii::app()->request->getPost('id'); 经过处理的$_POST['id']
//$id = Yii::app()->request->getParam('id'); //CHttpRequest更多

2)public function actionUpdate($id)  这种不支持多主键,会检查一下到底GET里面有没有id,没有id就直接不允许访问

'sayhello/<name>' => 'post/hello', name是PostController actionHello($name)的参数
'post/<alias:[-a-z]+>' => 'post/view',  domain/post/e文小写 其中:前面的alias是PostController actionView($alias)的参数
'(posts|archive)/<order:(DESC|ASC)>' => 'post/index', domain/posts/DESC或domain/posts/ASC
'(posts|archive)' => 'post/index', domain/posts或domain/archive
'tos' => array('website/page', 'defaultParams' => array('alias' =>'terms_of_service')),

When the URL is /tos, pass terms_of_service as the alias parameter value.

隐藏 index.php

还有一点,我们可以做进一步清理我们的网址,即在URL中藏匿index.php  入口脚本。这就要求我们配置Web服务器,以及urlManager应用程序元件。

1.add showScriptName=>false

2.add project/.htaccess

RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php

3.开启rewrite

简单的说,在main.php中简单设置urlManager,然后讲了3条规则,基本都覆盖到了。最后是隐藏index.php,请记住.htaccess位于index.php同级目录 ,而不是protected/目录。其他就简单了。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP下用rmdir实现删除目录的三种方法小结
Apr 20 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
php提示Failed to write session data错误的解决方法
Dec 17 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 PHP
php生成年月日下载列表的方法
Apr 24 PHP
PHP快速生成各种信息提示框的方法
Feb 03 PHP
Symfony2实现从数据库获取数据的方法小结
Mar 18 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
php查询及多条件查询
Feb 26 PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 PHP
yii去掉必填项中星号的方法
Dec 28 #PHP
Yii中实现处理前后台登录的新方法
Dec 28 #PHP
Yii中CGridView实现批量删除的方法
Dec 28 #PHP
Yii基于数组和对象的Model查询技巧实例详解
Dec 28 #PHP
yii权限控制的方法(三种方法)
Dec 28 #PHP
Yii使用Captcha验证码的方法
Dec 28 #PHP
yii使用activeFileField控件实现上传文件与图片的方法
Dec 28 #PHP
You might like
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
python的mysqldb安装步骤详解
2017/08/14 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
python 爬虫请求模块requests详解
2020/12/04 Python
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
国际贸易个人求职信范文
2014/01/04 职场文书
县优秀教师事迹材料
2014/01/31 职场文书
成绩单公证书
2014/04/10 职场文书
财务情况说明书范文
2014/05/06 职场文书
淘宝店策划方案
2014/06/07 职场文书
社区反邪教工作方案
2014/06/16 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
十佳家长事迹材料
2014/08/26 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
微观世界观后感
2015/06/10 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang