【问题标题】:Do I need to have Controller.php in all my API subversion?我是否需要在我的所有 API 颠覆中都有 Controller.php?
【发布时间】:2018-07-22 20:00:27
【问题描述】:

我正在尝试在我的 Laravel 项目中创建 API 目录,但收到以下错误...

Class 'App\Http\Controllers\Controller' not found

我曾尝试在我的 API 控制器上使用 use App\Http\Controllers\Controller;,但没有成功。

我的 API 类被定义为...

class SyncController extends Controller {...}
class TimecardController extends Controller {...}

我很确定错误来自extends Controller 部分。

App\Http\Controllers\Controller 我有Controller.php。我推过去的一种方法是将Controller.php复制到App\Http\Controllers\Api\v2\并更改该控制器的命名空间以匹配它所在的位置(namespace App\Http\Controllers\Api\v2;

我不认为这是正确的,因为应该有一种方法可以从 API 子目录中的控制器中引用 Controller.php。

../Controllers/Controller.php 和 API 是一个子目录,../Controllers/Api/v2/SyncController.php

任何帮助将不胜感激。

谢谢

-----------编辑------------

我的 api 路由看起来像这样

Route::group(['prefix' => 'api/v2'], function () {
   Route::get('sync', 'Api\v2\SyncController@sync')->middleware('auth:api');
   Route::post('timecard', 'Api\v2\TimecardController@create')->middleware('auth:api');
});

【问题讨论】:

  • 确保你的类Controller的命名空间是App\Http\Controllers。然后运行composer dump-autoload
  • 您是否更改了 Controller.php 的命名空间,使其不是 App\Http\Controllers?如果 app/Http/Controllers/Controller.php 存在并且您收到此错误,则您要么搞砸了该文件,要么搞砸了 composer autoload 部分。
  • 分享App\Http\Controllers\Controller文件
  • 这里是Controller.php`命名空间App\Http\Controllers;使用 Illuminate\Foundation\Bus\DispatchesJobs;使用 Illuminate\Routing\Controller 作为 BaseController;使用 Illuminate\Foundation\Validation\ValidatesRequests;使用 Illuminate\Foundation\Auth\Access\AuthorizesRequests;类控制器扩展 BaseController { 使用 AuthorizesRequests,DispatchesJobs,ValidatesRequests; } `
  • 试试composer dump-autoload

标签: php laravel laravel-5 routes controllers


【解决方案1】:

无法找到 Controller 类,因为 API 控制器不在默认的 Laravel 控制器目录中。您需要将控制器类添加为use statement。然后自动加载器就能找到它。

namespace App\Http\Controllers\Api\v2;

use App\Http\Controllers\Controller;

class SyncController extends Controller {...}

当您使用它时,您可能还想将auth:api 中间件添加到整个组中。更安全、更高效。

Route::group(['prefix' => 'api/v2', 'middleware' => 'auth:api', 'namespace' => 'Api\v2'], function () {
   Route::get('sync', 'SyncController@sync');
   Route::post('timecard', 'TimecardController@create');
});

【讨论】:

  • 这在我运行 php composer.phar dump-autoload 之前没有用,但在其他情况下发现了。谢谢。
  • 很高兴了解组中的中间件。谢谢!
  • @SegFaultDev 是的,您甚至可以在其中添加命名空间,如您所见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
相关资源
最近更新 更多