在Yii用createUrl中明明白白生成网址
在Yii中经常要生成URL,不管是为了自动跳转还是仅仅是一个链接。下面对Yii中的URL生成做了一个总结。
提示:以下controllerX代表控制器X,actionX代表方法X。
在Controller::action中,我们要输出一个链接,可以这样做:
$this->createUrl(‘actionName’, array(‘params01′=>’value01′, ‘params02′=>’value02′) );
//Controller::createUrl($route,$params=array(),$ampersand=’&’)
第一个参数是一个字符串,值为路由名。比如action01、controller01/action01等格式。 第二个参数是一个数组,值为所有参数的key=>value对。 第三个参数是URL中每对参数之间的分隔符,一般默认为&不做修改。
假设我们在Controller01::action01中,想要生成指向action02的URL,可以这样做:
$this->createUrl(‘action02′ );
假设我们在Controller01::action01中,想要生成指向controller02::action02的URL,可以这样做:
$this->createUrl(‘action02/action02′ );
若action02是默认action,比如index,那么可省略,但最后的斜杠不可省略,即:
$this->createUrl(‘action02/’ );
斜杠放在最前面即不管代码存在于哪个module下或者哪个controller下,都从整个网站的最顶成生成URL。假设我们的代码存在于user模块的password控制器的reset方法下,下面的代码将会生成不同的URL:
$this->createUrl(‘/abc’); //生成 /abc
$this->createUrl(‘/abc/efg’); //生成 /abc/efg
$this->createUrl(‘abc’); //生成 /user/password/abc
$this->createUrl(‘abc/’); //生成 /user/abc
$this->createUrl(‘abc/efg’); //生成 /user/abc/efg
在layout中,由于$this就是所属的控制器,所以与上面相同。
使用Yii::app()->getController()->createUrl(),来生成URL与上面相同。
使用Yii::app()->createUrl(),这时候路由名就不会自动增加当前Module名和当前Controller名,其他的同上。
在redirect时,有时候我们需要进行用户的转向,比如登录成功就转向到用户信息界面,可以这样做:
$this->redirect(array(‘index’, ‘params01′=>’value01′, ‘params02′=>’value02′));
//redirect($url,$terminate=true,$statusCode=302)
redirect方法接受的第一个参数是一个数组,数组的第一个值就是路由名,剩下的就是所有的参数值。上面的转向URL相当于直接使用下面代码生成的URL:
$this->createUrl(‘index’, array(‘params01′=>’value01′, ‘params02′=>’value02′) );
可以看出,$this->createUrl第三个参数在redirect中是无法设置的。
而redirect方法的第二个参数$terminate表示是否执行时就终结代码的运行并立即转向,一般保持默认。
第三个参数$statusCode表示转向的时候给浏览器发送的状态代码,一般保持默认,具体的状态代码表示的意思可以Google一下“网页状态码”。
最底层:
上面所有的生成URL的方式都最终转到了下面的代码:
UrlManage::createUrl($route,$params,$ampersand);
它与Yii::app()->createUrl()唯一的不同点是后者将$route进行了整理:trim($route,’/’)
当你需要用到URL的时候,又一时不清楚参数的格式,最好的方式就是看看这个方法的代码,然后你就会恍然大悟。这也是学习和实践PHP时的好习惯。
祝Yiier使用愉快!
转自 网址:http://hi.baidu.com/wastorode/item/fa908d1cdcebd2717b5f25f8
在Yii用createUrl中明明白白生成网址的更多相关文章
- Yii url createUrl redirect相关
一篇文章: 在yii中明明白白生成网址: 在Yii中经常要生成URL,不管是为了自动跳转还是仅仅是一个链接.下面对Yii中的URL生成做了一个总结.提示:以下controllerX代表控制器X,act ...
- YII框架路由和URL生成
路由和URL生成 当一个YII应用开始处理一个请求的时候,它首先要做的便是将请求的URL转化成一个路由.路由的作用是用于后续实例化相应的控制器和操作,以便处理请求,整个处理过程便叫做路由.路由的逆过程 ...
- 数据科学实战手册(R+Python)书中引用资料网址
本文会持续将<数据科学实战手册(R+Python)>一书中的附带参考资料网址手打出来, 方便访问. 由于书中的参考资料网址太多, 这个文档将可能花费一段时间才能完成. 第一章 P7 Rs ...
- yii框架的中的一些使用介绍
Yii框架的使用整理 获取配置文件中的数据 Yii::$app->params[‘配置文件中对应的参数名称’] 获取文件表单提交的数据 Yii::$app->request->pos ...
- java中如何生成可执行的jar文件
java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$ ...
- keil MDK中如何生成*.bin格式的文件
在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...
- JVM中可生成的最大Thread数量
最近想测试下Openfire下的最大并发数,需要开大量线程来模拟客户端.对于一个JVM实例到底能开多少个线程一直心存疑惑,所以打算实际测试下,简单google了把,找到影响线程数量的因素有下面几个: ...
- PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法
1 PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法如下, 依次打开Tools -- Execute Commands -- Run Script,运 ...
- 在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序
在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序 本贴首发于: http://xuekaiyuan.com/forum.php?mod=vie ...
随机推荐
- PHP stat() 函数 返回关于文件的信息。
定义和用法 stat() 函数返回关于文件的信息. 语法 fstat(file) 参数 描述 file 必需.规定要检查的文件. 说明 获取由 file 指定的文件的统计信息.如果 file 是符号连 ...
- idea项目无法自动导入maven库
解决:idea版本由15.0.*(需要Java8)降为14.1.4(Java7即可),搞定......
- java IO和NIO 的区别
Java NIO和IO的主要区别 下表总结了Java NIO和IO之间的主要差别. IO NIO 面向流 面向缓冲 阻塞IO 非 ...
- [xcode]instruments来检验你的app
原文网址:http://www.cocoachina.com/industry/20140114/7696.html 比较了好多关于instruments 还是发现老外写的比较牛逼.于是果 ...
- cookie学习
cookie是储存于访问者的计算机中的变量,每当同一台计算机通过浏览器请求某个页面时,就会发送这个cookie,可以使用javascript来创建和取回cookie的值. 创建和存储cookie 首先 ...
- table 单线条
<style> .a{ cursor:pointer; color: blue; text-decorati ...
- 2015-11-04 报表 (asp.net 部分)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Scrap_p.aspx.cs& ...
- 滑雪 分类: POJ 2015-07-23 19:48 9人阅读 评论(0) 收藏
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 83276 Accepted: 31159 Description Mich ...
- Dirichlet's Theorem on Arithmetic Progressions 分类: POJ 2015-06-12 21:07 7人阅读 评论(0) 收藏
Dirichlet's Theorem on Arithmetic Progressions Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- 关于Animation动画事件的几项测试
测试版本unity5.3.4 1.当帧率不足时,Animation会跳帧,假如跳帧超过动画事件的帧,动画事件也会执行. 2.当Animation混合时,混合中的动画不管哪个当前有动画事件,都会执行. ...