Laravel 目标类 [App\Http\Controllers\App\Http\Controllers\ApiController] 不存在
Posted
技术标签:
【中文标题】Laravel 目标类 [App\\Http\\Controllers\\App\\Http\\Controllers\\ApiController] 不存在【英文标题】:Laravel Target class [App\Http\Controllers\App\Http\Controllers\ApiController] does not existLaravel 目标类 [App\Http\Controllers\App\Http\Controllers\ApiController] 不存在 【发布时间】:2020-05-01 06:48:02 【问题描述】:出于某种原因,这可能是我的错,Laravel 认为它应该在路径中寻找类 ApiController:'App\Http\Controllers\App\Http\Controllers',所以......它加倍,但我有不知道为什么。
这是一个全新的 Laravel 6 项目,我使用 make:controller artisan 命令创建了 ApiController 并添加了一个函数,如下所示:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ApiController extends Controller
public function base()
return 'This is a test function';
然后我在 api 路由中添加了一个路由,如下所示:
use App\Http\Controllers\ApiController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::group(['prefix' => '/v1', 'as' => 'api'], function ()
Route::get('/base', ['uses' => ApiController::class . '@base'])->name('base');
);
如您所见,我什至“导入”了控制器,但就是找不到。 就是这样,没有其他文件或项目更改。还尝试清除路由缓存和转储自动加载,但这并没有改变任何东西。
【问题讨论】:
大小写很重要 - 是否有一个名为app/Http/Controllers/ApiController.php
的文件?或者是APIController.php
?
为什么不直接使用 Route::get('/base', 'ApiController@base')->name('base');
我相信,'uses' => ....
添加默认命名空间。你可以这样做[ApiController::class , 'base']
【参考方案1】:
要么删除这一行:
use App\Http\Controllers\ApiController;
或在开头添加\
:
use \App\Http\Controllers\ApiController;
【讨论】:
【参考方案2】:这应该可行:
Route::group(['prefix' => '/v1', 'as' => 'api'], function ()
Route::get('base', 'ApiController@base')->name('base');
);
不需要添加“使用”,因为控制器是从 App/Controllers 命名空间引用的,因为您可以在 RouteServiceProvider 上证实。
【讨论】:
【参考方案3】:路由的语法是“旧语法”与“新语法”的组合
你想要达到的是:
Route::get('/base', [ApiController::class, 'base'])->name('base');
【讨论】:
【参考方案4】:如果你想在路由器中引用 ::class ,应该这样做。
Route::group(['prefix' => '/v1', 'as' => 'api'], function ()
Route::get('base', [ApiController::class, 'base'])->name('base');
);
【讨论】:
【参考方案5】:在我的情况下,问题是,在 RouteServiceProvider
中,使用路由 Namespace
protected $namespace = 'App\Http\Controllers';
在 Laravel 8 命名空间是 commented out,我从链中删除命名空间,因为我的网络路由没有完全移动到 Laravel 8 语法,我需要这个命名空间。
Route::prefix('api')
->middleware('api')
-̶>̶n̶a̶m̶e̶s̶p̶a̶c̶e̶(̶$̶t̶h̶i̶s̶-̶>̶n̶a̶m̶e̶s̶p̶a̶c̶e̶)̶
->group(base_path('routes/admin-api.php'));
【讨论】:
【参考方案6】:在我的情况下(Laravel 8 项目),我需要一个单独的销毁路径,因为删除没有使用 html 表单,所以我的 web.php
文件是这样的:
use App\Http\Controllers\LocationController;
...
Route::resource('/locations', LocationController::class);
Route::get('/locations/destroy/location', [LocationController::class, 'destroy']);
但在这种情况下,如果我将use App\Http\Controllers\LocationController
放入第一行 (Route::resource...
) 会失败,如果我将其删除,则第二行会失败。所以我删除了use
行并在第二行添加了App\Http\Controllers
:
Route::resource('/locations', LocationController::class);
Route::get('/locations/destroy/location', [App\Http\Controllers\LocationController::class, 'destroy']);
所以显然 Laravel 不会在 Route
的第二种形式中自动添加 App\Http\Controllers
。
【讨论】:
【参考方案7】:在资源控制器描述中我从新项目中粘贴一个时出现此错误:
Route::resources([
'my_url' => LisseyDoruHisobotController:class,
..., //other controllers
]);
作为 Laravel 8 中的推荐签名,但目前正忙于 7 或 6 版本,应该在哪里:
Route::resources([
'my_url' => 'path\to\LisseyDoruHisobotController',
..., //other controllers
]);
否则会显示双倍路径
Laravel 目标类 [App\Http\Controllers\App\Http\Controllers\ ] 不存在
【讨论】:
以上是关于Laravel 目标类 [App\Http\Controllers\App\Http\Controllers\ApiController] 不存在的主要内容,如果未能解决你的问题,请参考以下文章
Laravel,该类存在,但我得到目标类 [PagesController] 不存在