在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);

UrlManage::createUrl($route,$params,$ampersand);

它与Yii::app()->createUrl()唯一的不同点是后者将$route进行了整理:trim($route,’/’)

最新文章

  1. SQL分组多列统计(GROUP BY后按条件分列统计)
  2. Unity3D打Box游戏
  3. memcached客户端的使用
  4. ECSHOP模板文件说明
  5. Monitoring and Tuning the Linux Networking Stack: Receiving Data
  6. Ubuntu环境下NFS服务器搭建
  7. Java8 ArrayList源码分析
  8. Spring Data JPA 入门Demo
  9. 基于hi-nginx的web开发(python篇)——表单处理和文件上传
  10. 【Android 应用开发】Android 数据存储 之 SQLite数据库详解
  11. Refit在ASP.NET Core中的实践
  12. VM磁盘映射共享方法,要求文件系统必须一致
  13. Content-type详解
  14. ipv6的校验格式
  15. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-1-单个host上的容器网络
  16. Ansible 插件 之 【CMDB】【转】
  17. python bug the C library strftime function.
  18. python+selenium实现动态爬取及selenuim的常用操作
  19. redis集群离线安装环境搭建过程
  20. DNS之XX记录

热门文章

  1. MTCNN 人脸检测
  2. 【记录】Git pull(拉取),push(上传)命令整理(详细)
  3. Ubuntu环境下SSH服务安装、SSH远程登录以及SSH数据传输
  4. 转 Java中wait和sleep方法的区别
  5. Mybatis(三)MyBatis 注解方式的基本 用法
  6. 手工实现hashset
  7. windows下zookeeper集群安装
  8. 【HDOJ6684】Rikka with Game(博弈)
  9. 阿里云数据库导出-本地mysql导入
  10. windows server IIS启用Windows authentication