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 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
php 生成文字png图片的代码
Apr 17 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
php常用字符串处理函数实例分析
Nov 22 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
PHP date()格式MySQL中插入datetime方法
Jan 29 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
在Laravel的Model层做数据缓存的实现
Sep 26 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学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
Vue性能优化的方法
2020/07/30 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
写好自荐信要注意的问题
2013/11/10 职场文书
生产厂厂长岗位职责
2013/12/25 职场文书
教师档案管理制度
2014/01/23 职场文书
家长会学生演讲稿
2014/04/26 职场文书
售后客服个人自我评价
2014/09/14 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书