【问题标题】:Laravel 5 return redirect is not working as it shouldLaravel 5 返回重定向无法正常工作
【发布时间】:2020-01-28 13:26:24
【问题描述】:

我有一个具有某些功能的控制器。在每个函数中,我都通过Contoller.php 共享用户数据来获取用户数据

在controller.php中

public function share_user_data() {
    $user = Auth::user();
    $this->checkValidation($user);
    $this->user = $user;
    View::share('user', $user);
}

public function checkValidation($user){
    if($user->email_activated == 0){
        var_dump($user->email_activated); // I get: int(0)
        return redirect('/verifyEmail');
    }
}

在另一个控制器中

public function viewCategory(Category $category){
    $this->share_user_data(); // here's the check
    $this->get_site_lang();
    $products = $category->products;
    return view('category', compact('category','products'));
}

但我得到了类别视图,并没有重定向到 verifyEmail 路由。如何解决这个问题以及为什么会这样?

【问题讨论】:

  • 您的var_dump 将数据写入输出流,这告诉 PHP 发送标头并开始渲染正文。标头发送后无法修改,因此无法重定向。
  • 最好从 Contoller.php 返回某种响应并根据控制器中的响应重定向,但您仍然可以尝试 public function checkValidation($user){ if($user-> email_activated == 0){ return redirect('/verifyEmail')->send(); } }
  • @EmanuelVintilă 问题不在于 var_dump 我添加它只是为了确保值为 0。我删除了它但仍然没有重定向
  • @SagarSainkar 我只是不想在每个函数中单独验证它我可以有一个单独的函数来返回验证结果但打算让它只有一个函数

标签: php laravel-5 redirect


【解决方案1】:

路由调用的控制器函数负责响应。我猜你的例子中是viewCategory()

您的viewCategory() 函数总是返回view()。它必须返回redirect()。我认为 main 函数应该负责选择请求的输出。

private function checkValidation($user) {
    return $user->email_activated == 0;
}

public function viewCategory(Category $category) {
    $user = Auth::user();

    /* ... call to share_user_data() or whatever ... */    

    if ($this->checkValidation($user)) {
        return redirect('/verifyEmail');
    }

    return view('category', compact('category','products'));
}

【讨论】:

  • 正在寻找另一种方法,而无需在所有需要验证的函数中重复验证。我将使用您提供的传统方法。谢谢
  • 您可以为此使用控制器的构造函数,但您无法从那里获取用户。您必须使用中间件,无论如何这是最佳实践laravel.com/docs/5.8/authentication#protecting-routes
猜你喜欢
  • 2014-09-30
  • 2019-12-19
  • 2021-04-11
  • 2015-07-05
  • 2015-07-28
  • 2014-01-05
  • 2017-09-23
  • 2015-08-09
  • 2014-07-01
相关资源
最近更新 更多