如何在Laravel 5.4中以相同的方法在控制器上应用多个中间件

时间:2017-05-17 11:48:43

标签: php laravel laravel-5.4

namespace App\Http\Controllers;
use Auth;
use Illuminate\Http\Request;

class UserProfileController extends Controller
{
    public function __construct(){
       $this->middleware('auth');
       $this->middleware('auth:admin');
    }
    public function show()
    {
        return view('user.profile.show');
    }
}

在此控制器中,我想在 show 上应用这两个中间件 方法。当我使用普通登录访问此方法时,这个 显示视图内容。但是当我使用admin访问此方法时 登录,然后此方法重定向到正常登录页面。

1 个答案:

答案 0 :(得分:1)

  

大家好

     

我解决了这个问题。

我只创建一个

  

名为_show()的私有方法

两者都很常见

  

名为show()和showAdmin()

的公共方法

  

auth中间件的show()方法

     

auth的showAdmin方法:管理中间件

以下是我的代码。

  

控制器页面

namespace App\Http\Controllers;
use Auth;
use Illuminate\Http\Request;

class UserProfileController extends Controller
{
    public function __construct(){
       $this->middleware('auth',['only'=>['show'],'only'=>['showAdmin]]);
       $this->middleware('auth:admin',['only'=>['showAdmin'],'only'=>['show]]);
    }
    public function show()
    {
        $response = $this->_show();
        //Send $response to view
    }
    public function showAdmin()
    {
        $response = $this->_show();
        //Send $response to view
    }
    private function _show()
    {
        //Common logic
        //return 
    }
}
  

查看页面

@if(Auth::check())
{--Goto show method via route--}
@else
{--Goto showAdmin method via route--}
@endif

我认为这对想要在Laravel 5.4中使用中间件的人有帮助

  

谢谢

尝试工作的心脏