【问题标题】:Laravel Api Route with namespace failed带有命名空间的 Laravel Api 路由失败
【发布时间】:2018-01-12 02:10:52
【问题描述】:

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

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

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

这很完美,而且效果很好。

我的routes/api.php 包含:

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

/api/shows 的路线应该给我以 json 格式的节目。 为了决定前端和 api,我将 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');
    });
}

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

[反射异常]
类 Api\ShowsController 不存在

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

【问题讨论】:

  • 你试过了吗:composer dump-autoload?
  • @LorenzoBerti 是的,我以前做过。

标签: php laravel api laravel-5


【解决方案1】:

我不知道你用的是什么版本的 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'),它可能会起作用。

【讨论】:

  • 那行得通。现在我明白为什么了。使用我的 api 命名空间,我剪切了App\Http\Controllers,因此自动加载器在/Api 而不是/App/Http/Controllers/Api 上搜索我的控制器。谢谢
猜你喜欢
  • 2023-03-16
  • 2018-05-05
  • 2011-10-10
  • 2017-12-13
  • 2018-03-15
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多