具有命名空间的Laravel Api Route失败

时间:2017-08-04 08:20:27

标签: php laravel api laravel-5

我有一个小的crud前端来存储信息。前端控制器称为Vue.component('star-rating', { template: '#template-star-rating', data: function data() { return { value: null, temp_value: null, ratings: [1, 2, 3, 4, 5], disabled: true }; }, props: { 'name': String, 'value': null, 'id': String, 'disabled': Boolean, 'required': Boolean }, methods: { star_over: function star_over(index) { console.log(this.disabled); if (this.disabled == true) { return; } this.temp_value = this.value; this.value = index; }, star_out: function star_out() { if (this.disabled == true) { return; } this.value = this.temp_value; }, set: function set(value) { if (this.disabled == true) { return; } this.temp_value = value; this.value = value; // On click disable - this works this.disabled = true; }, checkCanVote: function() { console.log('Inside checkCanVote'); console.log(this.disabled); this.disabled = true; console.log(this.disabled); } }, mounted() { this.checkCanVote(); } }); new Vue({ el: '#star-app' }); 。我想从api获得alle shows。

所以我的ShowsController包含:

routes/web.php

这完美而且工作得非常好。

我的Route::resource('shows', 'ShowsController'); 包含:

routes/api.php

路线Route::resource('shows', 'ShowsController', ['only' => ['index']]); 应该以json的形式给我显示。 决定前端和api我将/api/shows放入ShowsController

Controllers/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' => '*' ]); } } 更改为:

RouteServiceProvider

但命令protected function mapApiRoutes() { Route::group([ 'middleware' => 'api', 'namespace' => 'Api', 'prefix' => 'api', ], function ($router) { require base_path('routes/api.php'); }); } 给了我一个例外:

  

[ReflectionException]
    类Api \ ShowsController不存在

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

1 个答案:

答案 0 :(得分:4)

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

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

如果您将namespace($this->namespace)替换为namespace($this->namespace . '\Api'),则可能会有效。