2016-07-08 19 views
2

Ich habe diese „allgemeine“ Route in Laravel5 und es ist für AngularJS (alle erhalten Anfragen umleiten zu Hause, die das HTML enthält, in dem AngularJS enthalten ist):Laravel Route manchmal feuert ein anderes

Route::get('{path?}', function() { 

    return view('home'); 

})->where('path', '.+'); 

Und bevor diese es der von API (Ajax):

Route::group([ 'prefix' => 'api' ], function() { 

    Route::resource('user', 'UserController'); 

}); 

Also zuerst gibt es "API" und nach "eckigen". Das Problem ist, dass oft, wenn ich die Seite aufrufen api/SOMETHING feuert die zweite Route (AngularJS) mit der HTML-Antwort anstelle der echten (die der Ressource, ein JSON), so schrieb ich dieses kleine "Hack ":

use Illuminate\Http\Request; 
... 
Route::get('{path?}', function(Request $request) { 

    if ($request->is('api/*')) 
     return redirect($request->fullUrl()); 

    return view('home'); 

})->where('path', '.+'); 

Jetzt ist das Problem bei 95% gelöst, aber oft passiert es wieder nur bei der ersten Ladung.

Irgendeine Idee? Middleware/Vorher?

+0

was müssen Sie über Routen bemerken ist die Reihenfolge wichtig ist, da es Sie haben 'Domain/admin/{Pfad?}' Dann 'Domain/admin/login', dann gehe zu Domain/admin/login in Ihrem Browser die erste Route wird immer fangen und nicht auf die gewünschte Route? Versuchen Sie also, 'php artisan route: list'zu laufen, um Ihre Routen und die Ausgabe zu sehen, um zu sehen, ob sich das auswirkt –

+0

Das Problem ist, dass wenn ich zu/api/etwas gehe außer JSON und es in 95% der Fälle funktioniert, aber die anderen 5% der Route {Pfad?} wird aufgerufen. Seltsam. – Grork

+0

Sie können Ihre komplette Routendatei posten, wie Sie es haben/wollen und wenn möglich, führen Sie auch php artisan route: list aus, könnte aber einfacher als eine ganze Routendatei zu lesen sein, anstatt sich aufzuteilen :-) –

Antwort

0

Wenn ich Ihr Problem richtig verstehe, klingt es so, als würden Sie davon ausgehen, dass Laravel, sobald es eine Routengruppe betritt, in dieser Routengruppe "feststeckt". Wenn jedoch keine Routen in der Gruppe gefunden werden, "setzt" Laravel die Liste der registrierten Routen bis auf die Route {path?} fort.

Vielleicht eine Catchall-Route in Ihrer api Route Gruppe?

Route::group(['prefix' => 'api'], function() { 

    // API routes go here here 

    Route::get('{path}', function() { 
     // I believe this is the right way to make a JSON response in Laravel 5 
     return response()->json(['error' => 'endpoint not found']); 
    })->where('path', '.*'); 

});