具有命名空间的 Laravel Api 路由失败

rob*_*rob 0 php api laravel laravel-5

我有一个小的 crud 前端来存储信息。前端控制器称为ShowsController. 我想从 api 中获取所有节目。

所以我的routes/web.php包含:

Route::resource('shows', 'ShowsController');
Run Code Online (Sandbox Code Playgroud)

那太完美了,而且效果很好。

我的routes/api.php包含:

Route::resource('shows', 'ShowsController', ['only' => ['index']]);
Run Code Online (Sandbox Code Playgroud)

路线/api/shows应该给我显示为json。决定前端和API我把ShowsControllerControllers/Api folder

其中Controllers/Api/ShowsController包含:

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Show;

class ShowsController extends Controller
{
    public function index(){
        return response()
            ->json(Show::all())->withHeaders([
                'Content-Type' => 'text/json',
                'Access-Control-Allow-Origin' => '*'
            ]);
    }
}
Run Code Online (Sandbox Code Playgroud)

而且我也将其更改RouteServiceProvider为:

protected function mapApiRoutes()
{
    Route::group([
        'middleware' => 'api',
        'namespace' => 'Api',
        'prefix' => 'api',
    ], function ($router) {
        require base_path('routes/api.php');
    });
}
Run Code Online (Sandbox Code Playgroud)

但是命令php artisan route:list给了我一个例外:

[ReflectionException]
类 Api\ShowsController 不存在

为什么laravel 在api 目录中找不到定义的ShowsController?

Kév*_*let 6

我不知道您使用的是哪个版本的 Laravel,但在 5.4 中,我默认使用此方法:

protected function mapApiRoutes()
{
    Route::prefix('api')
         ->middleware('api')
         ->namespace($this->namespace)
         ->group(base_path('routes/api.php'));
}
Run Code Online (Sandbox Code Playgroud)

如果您替换namespace($this->namespace)namespace($this->namespace . '\Api').