2017-08-04 133 views
0

我有一个小型前端来存储信息。前端控制器被称为ShowsController。我想从api中获得Alle显示。Laravel Api Route名称空间失败

所以我routes/web.php包含:

Route::resource('shows', 'ShowsController'); 

那是完美的,工作非常出色。

routes/api.php包含:

Route::resource('shows', 'ShowsController', ['only' => ['index']]); 

路线/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' => '*' 
      ]); 
    } 
} 

,我也改变了RouteServiceProvider到:

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

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

[ReflectionException]
类的API \ ShowsController不存在

为什么laravel未在API目录查询所定义的ShowsController?

+0

你有尝试:composer dump-autoload? – LorenzoBerti

+0

@LorenzoBerti是的,我做过。 – rob

回答

2

我不知道你用的是什么版本的Laravel的,但在5.4,我有,默认情况下,这个方法:

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

如果通过namespace($this->namespace . '\Api')更换namespace($this->namespace)它可以工作。

+0

多数民众赞成在工作。现在我明白了为什么。用我的api命名空间,我裁切了'App \ Http \ Controllers',所以自动加载器在'/ Api'搜索我的控制器,而不是'/ App/Http/Controllers/Api'。谢谢 – rob

+0

不客气! – iArcadia

相关问题