我在Laravel5中有这个“通用”路线,它适用于AngularJS(所有获取请求都重定向到主页,其中包含HTML,其中包含angularJS):
Route::get( '{path?}', function() {
return view( 'home' );
})->where( 'path', '.+' );
在此之前,有一个API(ajax):
Route::group([ 'prefix' => 'api' ], function() {
Route::resource( 'user', 'UserController' );
});
首先是“API”和“angular”之后。问题是,当我调用页面时, api / SOMETHING 正在使用html响应而不是真实的(一个资源,一个JSON)触发第二个路径(AngularJS),所以我写了这个小“黑客”:
use Illuminate\Http\Request;
...
Route::get( '{path?}', function(Request $request) {
if ( $request->is( 'api/*') )
return redirect( $request->fullUrl() );
return view( 'home' );
})->where( 'path', '.+' );
现在问题解决了95%,但通常只在第一次加载时再次发生。
有什么想法吗?中间件/之前?
答案 0 :(得分:0)
如果我正确理解你的问题,听起来你假设一旦Laravel进入路线组,它就会“卡在”该路线组中。但是,如果组内没有匹配的路线,Laravel将“继续”在已注册路线列表中一直到您的cat {path?}
路线。
也许在api
路线组中制作一条小路线?
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', '.*');
});