2016-08-03 4 views
0

Iクラスは、URLセグメントごとに存在し、ミドルウェアがlaravelが例外をキャッチトリガされる前に、適切なtasks.Howeverを行い、投げるかどうかを確認するミドルウェアをしたエラー:ミドルウェアworkignないLaravelに予想通り5.2

ReflectionException in Route.php line 280: 
Class App\Http\Controllers\cms\modules\asdfasdfsadf\asdfasdfsadfController does not exist 

私が死んでcheckClassミドルウェアに何かをダンプすると、クラスが存在するときだけ値がダンプされます。

ミドルウェアが適用された私のルートは以下のとおりです。

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Request; 
use Illuminate\Contracts\Auth\Guard; 

class CheckClass 
{ 
    /** 
    * The Guard implementation. 
    * 
    * @var Guard 
    */ 
    protected $auth; 

    /** 
    * Create a new filter instance. 
    * 
    * @param Guard $auth 
    * @return void 
    */ 
    public function __construct(Guard $auth) 
    { 
     $this->auth = $auth; 
    } 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 

     if (!class_exists('App\\Http\\Controllers\\cms\\modules\\'.Request::segment(2).'\\'.Request::segment(2).'Controller')) { 

       return view("errors.404"); 

     } else { 
      return $next($request); 
     } 

     return $next($request); 
    } 
} 

はないはずです。ここで

Route::group(['prefix' => PREFIX,'middleware'=>array('auth','role','checkClass')], function() { 
    Route::group(['namespace' => 'cms' . '\\modules\\' . Request::segment(2) ], function() { 

     Route::get('{module}/pages/{page}', Request::segment(4) . '[email protected]'); 

     Route::get('{module}', Request::segment(2) . '[email protected]'); 

     Route::get('{module}/{page}', Request::segment(2) . '[email protected]' . Request::segment(3)); 

     Route::post('{module}/{page}', Request::segment(2) . '[email protected]' . Request::segment(3)); 

     Route::get('{module}/{page}/{id}', Request::segment(2) . '[email protected]' . Request::segment(3)); 

     Route::get('{module}/pages/{page}/{id}', Request::segment(4) . '[email protected]' . Request::segment(5)); 

     Route::post('{module}/pages/{page}/{id}', Request::segment(4) . '[email protected]' . Request::segment(5)); 

     Route::get('{module}/pages/{page}/{abc}/{id}', Request::segment(4) . '[email protected]' . Request::segment(5)); 

     Route::post('{module}/pages/{page}/{abc}/{id}', Request::segment(4) . '[email protected]' . Request::segment(5)); 
    }); 
}); 

我々はsegment.Hereは私checkClassミドルウェアであるURLごとのように私は、動的にルートを作成していることがわかりますlaravelがルートごとにコントローラクラスを検索する前にミドルウェアが起動しますか?

+1

なぜでしょうか? – TheFallen

答えて

0

ミドルウェアは、Laravelが使用するミドルウェアを見つける必要があるため(ルートは複数のグループなどにネストすることができるため)、ルートを見つけた後に起動されます。

このエラーは、デフォルトでは404となります。たぶんあなたに例外ハンドラがあるかどうかチェックしてください(app.debugはfalseに設定されています)。なぜなら、このような例外を404を表示するのではなく表示するからです。

+0

どこが 'app.debug' ? – Sumit

+0

あなたの '.env'(' APP_DEBUG')ファイルに設定するか、 'config/app.php'で直接変更することができます。 –

+0

これはエラーメッセージを無効にしますが、私はクラスがエラーをスローする前に例外を検出しないクラスをキャッチしたい – Sumit

関連する問題