php 在laravel中的方法内部时,重定向不起作用

nuypyhwy  于 2022-10-30  发布在  PHP
关注(0)|答案(4)|浏览(181)

当我试图把redirect放在一个方法里面时,它不会重定向,但是如果我直接把redirect放在里面,它就会重定向。请看下面我的代码。

正在检查方法- * 此方法将在会话为空时重定向 *

private function loadIdChecker()
{
    if(session('load_id') === null) {
        return redirect()->route('load-calculator');
    }
}

用户查看方法(不工作)

public function users()
{
  $this->loadIdChecker();

  ... The rest of the code here
}

用户查看方法(WORKING)

public function users()
{
  if(session('load_id') === null) {
    return redirect()->route('load-calculator');
  }
}
8e2ybdfx

8e2ybdfx1#

users()函数中尝试使用:return $this->loadIdChecker();而不是$this->loadIdChecker();
出现此错误的原因是,在您的原始代码中,users函数没有返回任何内容,而它应该返回一些内容...

km0tfn4u

km0tfn4u2#

只有当你把重定向示例给Laravel的响应处理器时,重定向才能正常工作。现在,它只返回一个Illuminate\Http\RedirectResponse的示例。所以,***如果***出于某种原因,你不想改变加载检查器的方法体,你可以在结尾添加一个额外的改变,比如返回true或者其他什么,来判断响应中的差异,如下所示:

private function loadIdChecker(){
    if(session('load_id') === null) {
        return redirect()->route('load-calculator');
    }
    return true;
}

然后,在您的代码中,您可以检查如下内容:

public function users()
{
  $returned_val = $this->loadIdChecker();
  if($returned_val instanceof Illuminate\Http\RedirectResponse){
     return $returned_val;
  }

  // The rest of the code goes here
}

解决这个问题的最好方法是使用一个中间件来检查load_id,如果load_id为空,则重定向到load-calculator页面。不推荐通过方法处理重定向,特别是当它是某种身份验证检查时。

b5lpy0ml

b5lpy0ml3#

您必须添加一个return语句(并且可能还要考虑load_id!== null的情况)。

public function users()
{
  return $this->loadIdChecker();
}
pw9qyyiw

pw9qyyiw4#

这对我有用

Public function index()
{
   echo  this->checksession();

   "Your other code"

}

public function checksession()
{
   if(Session::get('your_id')== '') 
    {
       return redirect('Yoururl')->with('msg','your message')
    } 

}

逻辑只是删除return并添加echo,它将显示重定向链接,但它工作正常

相关问题