2016-03-18 40 views
1

現在我正在laravel web項目上,有管理頁面上的功能將web設置爲維護模式,但此維護只是停止進行請求進來公共頁面,我嘗試製作中間件,因此如果在維護模式中設置了設置,所有處理公共頁面的路由或控制器都將停止。 (設置保存在具有'在線'或'維護'值的數據庫中)維護模式在公共頁面不在管理頁面[Laravel]

public function handle($request, Closure $next, $guard = null){ 
    // retrieve setting from database and turn into key value array 
    if($site_settings['status'] == 'maintenance'){ 
     return response()->view('errors.500', [], 500); 
    } 

    return $next($request); 
} 

我的方法不正確?

回答

1

你註冊了你的中間件在Kernel.php

你需要將它添加到app/Http/Kernel.php,全球中間件評論下:

/** 
* The application's global HTTP middleware stack. 
* 
* These middleware are run during every request to your application. 
* 
* @var array 
*/ 
protected $middleware = [ 
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    \App\Http\Middleware\YourMiddlewareClass::class, // add it here 
]; 

在你的中間件,然後你可以添加以下內容:

if ($site_settings['status'] == 'maintenance' && !$request->is('admin/*')){ 
    return response()->view('errors.500', [], 500); 
} 

這將迫使錯誤500上的任何東西這不是從URL中的admin/開始的。

+0

是的,我做了,我的中間件完美地工作..感謝... –

+0

對不起,我已經更新了我的答案與其他代碼來幫助。 –

+0

嗯我可以從全局刪除'!$ request->是('admin/*')',只需在公共頁面路由中添加中間件,謝謝btw .. –