Laravel 目标 class [App\Http\Controllers\App\Http\Controllers\ApiController] 不存在
Laravel Target class [App\Http\Controllers\App\Http\Controllers\ApiController] does not exist
出于某种原因,这可能是我的错,Laravel 认为它应该在路径中寻找 class 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');
});
如您所见,我什至 'imported' 控制器,但就是找不到。
就是这样,没有其他文件或对项目的更改。还尝试清除路由缓存和转储自动加载,但这并没有改变任何东西。
要么删除这一行:
use App\Http\Controllers\ApiController;
或者在开头加一个\
:
use \App\Http\Controllers\ApiController;
这应该有效:
Route::group(['prefix' => '/v1', 'as' => 'api'], function () {
Route::get('base', 'ApiController@base')->name('base');
});
无需添加 "use",因为控制器是从 App/Controllers 命名空间引用的,您可以在 RouteServiceProvider 上证实这一点。
您的路由语法是 "old syntax" 与 "new syntax"
的组合
您要实现的目标是:
Route::get('/base', [ApiController::class, 'base'])->name('base');
如果你想在路由器中引用::class,应该这样做。
Route::group(['prefix' => '/v1', 'as' => 'api'], function () {
Route::get('base', [ApiController::class, 'base'])->name('base');
});
在我的案例中,问题是在 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'));
在我的例子中(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
。
当我在资源控制器描述中粘贴一个新项目时出现此错误:
Route::resources([
'my_url' => LisseyDoruHisobotController:class,
..., //other controllers
]);
作为Laravel 8中的推荐签名,但目前忙于7或6版本,应该是:
Route::resources([
'my_url' => 'path\to\LisseyDoruHisobotController',
..., //other controllers
]);
否则会显示双倍路径
Laravel目标class[App\Http\Controllers\App\Http\Controllers\]不存在
出于某种原因,这可能是我的错,Laravel 认为它应该在路径中寻找 class 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');
});
如您所见,我什至 'imported' 控制器,但就是找不到。 就是这样,没有其他文件或对项目的更改。还尝试清除路由缓存和转储自动加载,但这并没有改变任何东西。
要么删除这一行:
use App\Http\Controllers\ApiController;
或者在开头加一个\
:
use \App\Http\Controllers\ApiController;
这应该有效:
Route::group(['prefix' => '/v1', 'as' => 'api'], function () {
Route::get('base', 'ApiController@base')->name('base');
});
无需添加 "use",因为控制器是从 App/Controllers 命名空间引用的,您可以在 RouteServiceProvider 上证实这一点。
您的路由语法是 "old syntax" 与 "new syntax"
的组合您要实现的目标是:
Route::get('/base', [ApiController::class, 'base'])->name('base');
如果你想在路由器中引用::class,应该这样做。
Route::group(['prefix' => '/v1', 'as' => 'api'], function () {
Route::get('base', [ApiController::class, 'base'])->name('base');
});
在我的案例中,问题是在 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'));
在我的例子中(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
。
当我在资源控制器描述中粘贴一个新项目时出现此错误:
Route::resources([
'my_url' => LisseyDoruHisobotController:class,
..., //other controllers
]);
作为Laravel 8中的推荐签名,但目前忙于7或6版本,应该是:
Route::resources([
'my_url' => 'path\to\LisseyDoruHisobotController',
..., //other controllers
]);
否则会显示双倍路径
Laravel目标class[App\Http\Controllers\App\Http\Controllers\]不存在