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

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

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

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

  1. private function loadIdChecker()
  2. {
  3. if(session('load_id') === null) {
  4. return redirect()->route('load-calculator');
  5. }
  6. }

用户查看方法(不工作)

  1. public function users()
  2. {
  3. $this->loadIdChecker();
  4. ... The rest of the code here
  5. }

用户查看方法(WORKING)

  1. public function users()
  2. {
  3. if(session('load_id') === null) {
  4. return redirect()->route('load-calculator');
  5. }
  6. }
8e2ybdfx

8e2ybdfx1#

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

km0tfn4u

km0tfn4u2#

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

  1. private function loadIdChecker(){
  2. if(session('load_id') === null) {
  3. return redirect()->route('load-calculator');
  4. }
  5. return true;
  6. }

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

  1. public function users()
  2. {
  3. $returned_val = $this->loadIdChecker();
  4. if($returned_val instanceof Illuminate\Http\RedirectResponse){
  5. return $returned_val;
  6. }
  7. // The rest of the code goes here
  8. }

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

展开查看全部
b5lpy0ml

b5lpy0ml3#

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

  1. public function users()
  2. {
  3. return $this->loadIdChecker();
  4. }
pw9qyyiw

pw9qyyiw4#

这对我有用

  1. Public function index()
  2. {
  3. echo this->checksession();
  4. "Your other code"
  5. }
  6. public function checksession()
  7. {
  8. if(Session::get('your_id')== '')
  9. {
  10. return redirect('Yoururl')->with('msg','your message')
  11. }
  12. }

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

展开查看全部

相关问题