yii create url (二)
在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时的好习惯。
最新文章
- mfc+vtk
- 简单理解——面向切面编程(AOP)
- Java对象的序列化
- [转]df命令
- Eclipse Maven Web Application 设置配置文件
- 【自己动手】sublime text插件开发
- Word2003中如何使封面和目录中不插入页码
- 【转载】看StackOverflow如何用25台服务器撑起5.6亿的月PV
- Redis数据过期策略详解
- 老K漫谈区块链的共识(3)——分布式系统和区块链共识
- Java IO流篇
- 01.Redis 初体验
- 激活函数Sigmoid、Tanh、ReLu、softplus、softmax
- php 将16进制数串转换为二进制数据的函数
- ElasticSearch 2 (33) - 信息聚合系列之聚合过滤
- hibernate的配置文件,使用XML方式
- fuzz系列之afl
- css笔记--用户界面样式
- Struts2(七)
- 缩进与对齐——正确地使用Tab和空格
热门文章
- javascript学习总结(二):DOM常用方法。
- 【Java基础】创建和销毁对象
- Windows Azure Cloud Service (37) 浅谈Cloud Service
- postgres中的中文分词zhparser
- 利用grunt-contrib-connect和grunt-connect-proxy搭建前后端分离的开发环境
- 【原创】Lucene.Net+盘古分词器(详细介绍)
- C#编程总结(十二)断点续传
- C# Redis使用之StackExchange
- 背水一战 Windows 10 (9) - 资源: 资源限定符概述, 资源限定符示例
- spring笔记4 spring MVC的基础知识4