关于Yii中的url的跳转,有两个方法,第一个是Redirect,第二个是Forward

Yii的Rediret

使用方法

1
$this->redirect(array('index'));

对应的是当前controller的index action

http://www.localyii.com/testwebap/index.php?r=user/index

1
$this->redirect(array('view','id'=>$model->id));

对应的是当前controller的view action并传递id参数值为3

http://www.localyii.com/testwebap/index.php?r=user/view&id=3

1
2
$this->redirect(array('/site/contact','id'=>12));
$this->redirect(array('site/contact','id'=>12));

http://www.localyii.com/testwebap/index.php?r=site/contact&id=12

1
$this->redirect(array('site/contact','id'=>'idv','name'=>'namev'));

http://www.localyii.com/testwebap/index.php?r=site/contact&id=idv&name=namev

1
$this->redirect(array('site/contact','v1','v2','v3'));

http://www.localyii.com/testwebap/index.php?r=site/contact&0=v1&1=v2&2=v3

1
$this->redirect(array('site/contact','v1','v2','v3','#'=>'ttt'));

带anchor的
http://www.localyii.com/testwebap/index.php?r=site/contact&0=v1&1=v2&2=v3#ttt

1
$this->redirect(array('user/create','v1','v2','v3','#'=>'ttt'));

http://www.localyii.com/testwebap/index.php?r=user/create&0=v1&1=v2&2=v3#ttt
modules的redirect

1
$this->redirect(array('testmod/default/index','v1','v2','v3','#'=>'ttt'));

http://www.localyii.com/testwebap/index.php?r=testmod/default/index&0=v1&1=v2&2=v3#ttt
跳转到一个绝对路径

1
$this->redirect('http://www.baidu.com');

函数的原型是

1
2
3
4
5
6
7
8
public function redirect($url,$terminate=true,$statusCode=302)
{
if(strpos($url,'/')===0)
$url=$this->getHostInfo().$url;
header('Location: '.$url, true, $statusCode);
if($terminate)
Yii::app()->end();
}

Yii的forward

1
2
3
$this->forward('/testmod/default/index');

$this->forward('testmod/default/index');

地址栏url

http://www.localyii.com/testwebap/index.php

forward是不需要参数的

函数的原型是:

1
2
3
4
5
6
7
8
9
10
11
12
13
public function forward($route,$exit=true)
{
if(strpos($route,'/')===false)
$this->run($route);
else
{
if($route[0]!=='/' && ($module=$this->getModule())!==null)
$route=$module->getId().'/'.$route;
Yii::app()->runController($route);
}
if($exit)
Yii::app()->end();
}

forward和redirect的区别显而易见

1,浏览器url地址

2,是否支持绝对地址

3,是否传递参数