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+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
Mar 07 PHP
php中iconv函数使用方法
May 24 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 PHP
php之curl实现http与https请求的方法
Oct 21 PHP
THINKPHP项目开发中的日志记录实例分析
Dec 01 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
PHP 读取文本文件内容并分页显示
Jan 02 PHP
PHP pear安装配置教程
May 14 PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 PHP
Laravel学习教程之从入口到输出过程详解
Aug 27 PHP
PHP设计模式之简单工厂和工厂模式实例分析
Mar 25 PHP
php实现网页上一页下一页翻页过程详解
Jun 28 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
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
PHP中each与list用法分析
2016/01/08 PHP
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python批量修改文件编码格式的方法
2018/05/31 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
python3 enum模块的应用实例详解
2019/08/12 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
Django如何实现防止XSS攻击
2020/10/13 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
结构和类有什么异同
2012/07/16 面试题
师范大学毕业自我鉴定
2013/11/21 职场文书
初中地理教学反思
2014/01/11 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
销售人员获奖感言
2014/02/05 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
信仰纪录片观后感
2015/06/08 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
Python自动化测试PO模型封装过程详解
2021/06/22 Python