2017-07-04 123 views
-1

我正在嘗試在路由上執行操作前檢查。因此,我成立了一箇中間件如下:Laravel 5.4中的路由操作方法

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Route; 

class PermissionMiddleware 
{ 
/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    list(, $action) = explode('@', Route::getCurrentRoute()->getActionName()); 

    return $next($request); 
} 
} 

在我的控制,我做如下:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use App\Blog; 
use Image; 
use File; 
use Route; 

class BlogController extends Controller 
{ 

public function __construct() 
{ 
    $this->middleware(['auth','permission']); 
} 


public function create() 
{  
    ....... 
    ....... 
} 

我的路線如下:

Route::get('create/news',"[email protected]"); 

然而,當我導航到路由,它顯示如下錯誤:

enter image description here

給人一種例外如下:PermissionMiddleware.php上的空

FatalErrorException調用一個成員函數getActionName()(19行)

我試圖無濟於事解決這個。

+0

請閱讀[在什麼情況下,我可以添加「緊急」或其他類似的短語到我的問題,以獲得更快的答案?](/ meta.stackoverflow.com/q/326569) - 總結是,這不是解決志願者問題的理想方式,而且可能對獲得答案起反作用。請不要將這添加到您的問題。 – halfer

回答

0

再次閱讀錯誤消息,你會發現問題。

的錯誤是:

FatalErrorException Call to a member function getActionName() on null in PermissionMiddleware.php (line 19) 

第19行,我想你有這樣的:

list(, $action) = explode('@', Route::getCurrentRoute()->getActionName()); 

這意味着,錯誤來自這裏:「路線:: getCurrentRoute() - > getActionName ()」。

Route :: getCurrentRoute()返回null。所以你從null調用方法「getActionName()」。

請檢查方法「getCurrentRoute()」以解決問題。 祝你好運。

+0

是的。你是對的。 Route :: getCurrentRoute()返回null,我不知道原因。任何線索爲什麼可能發生? – Josh

+0

這可能有所幫助:https://stackoverflow.com/a/30052319/1564840 – Pascut

+0

謝謝,但我真的看到了之前。但是我正在尋找的是routeAction()而不是routeName(),而你提到我的那個鏈接是討論routeName()而是 – Josh