2015-09-07 15:43:09 4750次浏览 2条回答 1 悬赏 10 金钱

在做业务逻辑时,经常需要跳转页面(未登录用户跳转到登录页面)
controller中有个redirect()方法,按理说应该执行了该方法就应该终止后续操作直接跳转。
但结果相反,如果不写return,则继续执行。
案例:
我在controller中的init()方法加入逻辑代码,当执行$this->redirect($url)时,不管我是否加return false 、return true都没有用,他还是继续执行完代码。只能使用header("Location:$url");exit;解决此问题。
请问在controller中,什么代码可以代替header("Location:$url");exit;

最佳答案

  • 500miles 发布于 2015-09-07 16:19 举报

    没错儿, 必须 return 才能立马跳转, 而不执行后续代码;

    redirect() 中 只指定了响应的 http status code,

    你所说的 header() 发生在 send response 的时候

    你可以 return $this->redirect('xxx');

    或者 显式调用 Yii::$app->response->send();

    再或者 Yii::$app->end();

    最简洁的 还是return;

    3 条回复
    回复于 2015-09-07 18:03 回复

    我测试了下,Yii::$app->end();、Yii::$app->response->send();不管在actionXXX还是init方法都能终止代码,而return只能在action终止代码,是什么原因

    回复于 2015-09-07 18:06 回复

    如果在init方法使用return,它还是会执行actionXXX的代码的

    回复于 2015-09-07 23:06 回复

    因为 init() 仅仅执行, 最终并没有 return .

  • 回答于 2015-09-07 15:44 举报

    在beforeAction里做你想做的工作吧~

    2 条回复
    回复于 2015-09-07 15:46 回复

    在beforeAction的效果是一样的

    回复于 2015-09-07 16:11 回复

    beforeAction里如果不想继续执行本控制器,返回假(return false)即可

您需要登录后才可以回答。登录 | 立即注册
hawkcraw
助理

hawkcraw 123

注册时间:2013-04-08
最后登录:2019-01-28
在线时长:4小时7分
  • 粉丝3
  • 金钱75
  • 威望0
  • 积分115

热门问题