Laravel路线有时会发射另一条路线

时间:2016-07-08 10:28:48

标签: php laravel laravel-5

我在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%,但通常只在第一次加载时再次发生。

有什么想法吗?中间件/之前?

1 个答案:

答案 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', '.*');

});