Laravel从私有方法进行重定向

12

我有一个控制器,其中有一个方法。该方法的代码太长了,因此我已将一些代码放在其他私有方法中,以便使方法易于理解而不会弄乱它。

现在,当我通过URL访问公共方法时,根据参数,它将调用特定的私有方法来处理工作。工作处理完毕后,我想重定向到一个URL,但重定向不起作用。

我的代码示例如下:

class SomeClass extends BaseController{
    public function getMethodName()
        {
            //check the params and choose a private method to call
            $this->processJob();
        }
    private function processJob()
    {
         //process the job and redirect at the end
         return Redirect::to('some/url');
    }
}

问题在于上述重定向无法正常工作。为什么会这样?在Codeigniter中,当您使用redirect时,它可以从任何地方调用并正常工作。

如果上面的代码示例不是正确的方法,请希望有人能向我展示如何做。谢谢。


它应该有效 - 我一直在使用那种类型的代码。你有收到任何错误吗?如果你将重定向移到 processJob() 的开头会发生什么? - Laurence
它不起作用。我在processJob()中删除了所有其他代码,只保留了重定向行,但仍然不起作用。顺便说一下,我正在使用L4。 - WebNovice
你确定 processJob 被调用了吗?尝试在 processJob 中加入 dd('hi') - 你看到 'hi' 了吗? - Laurence
是的,processJob() 方法正在被调用。我尝试使用 exit('hello'); 并且在浏览器中显示了 'hello'。 - WebNovice
4
return $this->processJob() 的意思是返回并执行 processJob() 方法。 - Laurence
2个回答

22

你还需要返回$this->processJob()的返回值。

class SomeClass extends BaseController{
  public function getMethodName()
  {
      //check the params and choose a private method to call
      return $this->processJob();
  }

  private function processJob()
  {
     //process the job and redirect at the end
     return Redirect::to('some/url');
  }
}

1
就像这样看待它:Laravel调用您的控制器函数并期望得到返回值,以便知道接下来该做什么。在您的代码中,return Redirect::to('some/url');被返回到调用私有函数的位置,但它并没有到达Laravel。是的,听起来有点愚蠢,但基本上就是这种情况。 - mgrueter

2
您可以尝试根据私有函数的结果从公共函数重定向到另一页(我认为这是使您的代码更易读的更好解决方案)。但是它也可以像您编写的那样工作...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接