关于重定向,请教下terry该怎么解决。

技术问题 · sumic · 于 5年前 发布 · 2011 次阅读

如何在block层redirect而不执行后面的代码?

//cnontroller
class TestController{
	public function actionIndex(){
		$data = $this->getblock()->getLastData();
		$this->render($this->action->id,$data);
}
}
//block
class index{
	public function getLastData(){
		if(true){
			Yii::$service->page->message->adderror('跳转前的消息');
			Yii::$service->url->redirect(['site/main','name'=>$name]);
			//这里如果return test/inde会报错没有$data
			//这里如果不return 可以跳转,但是site/main就不能得到flashmessage;
		}
		Yii::$service->page->message->adderror('如果不return这里还是可以执行的,test/index截取了flashmessage');
		return $data;
	}
}

试了半天好像除了exit;没有找到其他的解决办法,terry看你的url service 里面注释的代码似乎也有这样的问题,你是怎么解决的呢?

共收到 6 条回复
sumic#15年前 0 个赞

如果是默认的在controller层处理业务逻辑那么return $this->redirect是没有问题的,现在加了一层block不知道该怎么弄了。。return 回去又到controller层了,后面的代码还在跑。。

Fecmall#25年前 0 个赞

用return

Fecmall#35年前 0 个赞

exit,是阉割式退出,后台部分用了一些,除了一些特殊的情况,尽量用return,具体的去了解yii2框架

yii2作为一个框架,当你的代码执行完成后,框架还要执行一些其他事情,譬如response header,因此,将输出的信息return给controller,controller继续return

但是有一些情况,你希望exit退出,那么执行后,框架的结束部分就不会被执行

sumic#45年前 0 个赞

@Fecshop #3楼 如果是默认的在controller层处理业务逻辑那么return t是没有问题的,现在加了一层block不知道该怎么弄了。。return 回去又到controller层了,后面的代码还在跑。

Terry#55年前 0 个赞

1.block 层进行return 就回到了controller层

2.block层 return后,返回controller层,进行判断,如果需要退出,则controller进行return

脑子多转一个圈,就是一个值传递的问题。

sumic#65年前 0 个赞

@Terry #5楼 就是觉得这样有点啰嗦,我还是把判断放在controller了

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics