在路由中修改中间件?

时间:2018-08-12 12:40:06

标签: laravel routes middleware

我创建了routeMiddleware,它将为我的主导航获取并准备配置。正常的页面调用将由名为“ PageController”的控制器处理。在这里,我在构造函数中定义了中间件。

namespace App\Http\Controllers;

//use Illuminate\Http\Request;
use Illuminate\Support\Facades\Request;


class PageController extends Controller
{
    public function __construct()
    {
        $this->middleware('mainnavconfig');
    }
    public function home(Request $request){
        return view('home');
    }
    public function page1(Request $request){
        return view('intern');
    }
}

当我获得/ page1(具有登录用户)时,一切都会按预期进行。

在routes.php中定义此页面的方式

Route::group(['as'=>'Intern.','middleware'=>['auth','mainnavconfig']], function () {

    Route::get('/page1', '\App\Http\Controllers\PageController@page1')->name('page1');

});

对于我的根URL“ /”,我想显示未授权用户的登录名,并显示已登录用户的“主页”页。我在routes.php中执行此操作的方式

Route::get('/', function (Request $request) {

    // logged in -> home
    if (Auth::check()) {

        return \App::make('\App\Http\Controllers\PageController')->home($request);
        //return \App::call('\App\Http\Controllers\PageController@home');

    // not logged in
    }else{

        return view('login');
    }
})->name('root');

问题在于,似乎“ mainnavconfig”-中间件在我登录后将不会执行。我认为此时修改中间件数组可能为时已晚?

不会通过直接调用controller-method-direct来调用middlware

return \App::call('\App\Http\Controllers\PageController@home');

并且不会通过实例化PageController本身来执行。

return \App::make('\App\Http\Controllers\PageController')->home($request);

那么解决此问题的正确方法是什么?我知道我可以简单地将登录用户的重定向更改为……。像“ / home”一样,一切都很好,但我想保留起始页面的“ /”根URL。

我希望我把一切都弄清楚了。我在php 7.1.19中使用laravel 5.6.29

route:list的输出

+--------+----------+------------+---------------+----------------------------------------------------+------------------------+
| Domain | Method   | URI        | Name          | Action                                             | Middleware             |
+--------+----------+------------+---------------+----------------------------------------------------+------------------------+
|        | GET|HEAD | /          | root          | Closure                                            | web                    |
|        | POST     | /          |               | App\Http\Controllers\Auth\LoginController@login    | web,guest              |
|        | GET|HEAD | Logout     | logout        | App\Http\Controllers\Auth\LoginController@logout   | web                    |
|        | GET|HEAD | PW         | pwresetform   | Closure                                            | web                    |
|        | GET|HEAD | PW/Neu     | pwrenewform   | Closure                                            | web                    |
|        | GET|HEAD | Page1      | Intern.Seite1 | App\Http\Controllers\PageController@page1          | web,auth,mainnavconfig |
|        | POST     | api/PW/Get | getnewPW      | App\Http\Controllers\Auth\LoginController@getNewPW | api,guest              |
|        | POST     | api/PW/Set | pwreset       | App\Http\Controllers\Auth\LoginController@setPW    | api,guest              |
|        | GET|HEAD | api/user   |               | Closure                                            | api,auth:api           |
+--------+----------+------------+---------------+----------------------------------------------------+------------------------+

0 个答案:

没有答案