2016-08-03 26 views
0

Ich habe Middleware gemacht, dass, wenn Klasse überprüft existiert nach url Segment und führt entsprechende tasks.However bevor die Middleware ausgelöst wird Laravel die Ausnahme abfängt und wirft Fehler:Middleware nicht workign wie in Laravel erwartet 5.2

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

Wenn ich sterbe und dump alles auf checkClass Middleware ist der Wert Dump nur wenn die Klasse existiert.

Meine Route wo Middleware angewendet wird, ist:

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)); 
    }); 
}); 

Hier können wir sehen, dass ich als pro-URL dynamisch Routen erstellt segment.Here ist meine checkClass Middleware:

<?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); 
    } 
} 

Sollte nicht Middleware Feuer vor Laravel sucht Controller Klasse wie pro Route?

+1

Warum würden Sie auch das tun? – TheFallen

Antwort

0

Die Middleware wird ausgelöst, nachdem Laravel die Route gefunden hat, da sie herausfinden muss, welche Middleware verwendet werden soll (da eine Route in mehreren Gruppen verschachtelt werden kann).

Dieser Fehler sollte jedoch standardmäßig zu einem 404 führen. Vielleicht überprüfen Sie youre Exception-Handler, um sicherzustellen, dass es tut (und überprüfen Sie mit app.debug auf false gesetzt, weil es dann Ausnahmen wie diese anzeigt, anstatt nur eine 404.

+0

wo ist 'app.debug' ? So dass ich es auf false setzen kann? – Sumit

+0

Es ist entweder in Ihrer '.env' (' APP_DEBUG') Datei oder Sie können es direkt in 'config/app.php' ändern. –

+0

nein, es deaktiviert nur Fehlermeldung aber Ich möchte die Ausnahme "Klasse nicht gefunden" abfangen, bevor die Route einen Fehler auslöst – Sumit