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时的好习惯。

时间: 2024-12-25 06:05:53

yii create url (二)的相关文章

yii create url (一)

1.$this->redirect这里的$this是当前的controller.可能是应用程序的也 可能是模块下的 这里仅将解一下第一个参能是url,当url是一个字符串时,它会自己动跳转 如$this->redirect('/'); 会跳转到站点根,如果你的当前主机为localhost, 那么他就会跳到http://localhost/ 再者$this->redirect('/books');,则会跳到http://localhost/books 在应用程序的controller中,也

Yii的URL助手

Url 帮助类 ? 获得通用 URL 记住 URLs 检查相对 URLs Url 帮助类提供一系列的静态方法来帮助管理 URL. 获得通用 URL ? 有两种获取通用 URLS 的方法 :当前请求的 home URL 和 base URL . 为了获取 home URL ,使用如下代码: $relativeHomeUrl = Url::home(); $absoluteHomeUrl = Url::home(true); $httpsAbsoluteHomeUrl = Url::home('ht

Yii常用URL及获取IP地址

当前页面:Yii::app()->request->url;跳转前一个页面:$this->redirect(Yii::app()->request->urlReferrer);根目录URL:Yii::app()->baseUrl 或 Yii::app()->request->baseUrl;自定义URL:$this->createUrl(‘post/read’,array(‘id’=>100)) 或 Yii::app()->createUr

yii源码二 -- interfaces

path:framework/base/interfaces.php overview:This file contains core interfaces for Yii framework. interface IApplicationComponent:all application components must implement. 在application完成配置后就调用init()初始化application. interface ICache:must be implemente

plus.webview.create( url, id, styles, extras )参数及说明

plus.webview.create( "xxx.html", //url:String类型,可选,新窗口加载的HTML页面地址.新打开Webview窗口要加载的HTML页面地址,可支持本地地址和网络地址. "xxx", //id:String类型,可选,新窗口的标识.窗口标识可用于在其它页面中通过getWebviewById来查找指定的窗口,为了保持窗口标识的唯一性,应该避免使用相同的标识来创建多个Webview窗口.如果传入无效的字符串则使用url参数作为We

PHP2(url二次编码)

PHP2 抓包查看 什么也没有  那就扫一下目录吧 御剑开启 发现了index.phps  可能你没扫到 那说明你该把它添加到你的字典里了 访问 感觉好像少了点什么,查看一下源代码 让我们传入一个id 不能直接传入admin  但是对id使用urldecode以后的值还必须是admin     这个时候就要使用url二次编码了 说一下我对url二次编码的理解 当我们在url输入数据的时候,url会对其进行url编码 比如输入空格的时候会自动编码为%20 而当服务器在接收这些数据的时候会自动进行u

yii请求url

yii\web\Request::url:返回 /admin/index.php/product?id=100, 此URL不包括host info部分. yii\web\Request::absoluteUrl:返回 http://example.com/admin/index.php/product?id=100, 包含host infode的整个URL. yii\web\Request::hostInfo:返回 http://example.com, 只有host info部分. yii\w

Yii 1.0 伪静态即Yii配置Url重写(转)

第一步:配置 URL Management(网址管理) 只需要在config文件夹下面的main.php文件中进行配置就好了 'components' => array( 'urlManager' => [ 'showScriptName' => false,//这里是隐藏index.php那个路径的 'urlFormat' => 'path', 'rules' => [ '<controller:\w+>/<id:\d+>' => '<c

Yii 获取url 的一些方法

原文出处http://blog.csdn.net/iefreer/article/details/21325371 1. 获取url中的host信息: Yii::app()->request->getHostInfo() 2. 获取url中的路径信息(不包含host和参数): Yii::app()->request->getPathInfo() 3. 获取不包含host信息的url(含参数): Yii::app()->request->url 或者 Yii::app()