“目标类 [Modules\\Admins\\Controllers\\AdminController] 不存在。”

Posted

技术标签:

【中文标题】“目标类 [Modules\\\\Admins\\\\Controllers\\\\AdminController] 不存在。”【英文标题】:"Target class [Modules\\Admins\\Controllers\\AdminController] does not exist."“目标类 [Modules\\Admins\\Controllers\\AdminController] 不存在。” 【发布时间】:2021-10-18 18:22:37 【问题描述】:

我正在使用 Laravel 8 开发一个电子商务网站,我尝试更改 Laravel 文件夹结构我已将视图文件夹放在新路径 modules/admins 中,它工作正常,我'还在 modules/admins 路径中创建了一个模型文件夹,它工作正常,但是,我在控制器文件夹中遇到了问题。

我仍然有 app/http/controllers/Controller.php,但现在我在 modules 文件夹中创建了一个名为 Controllers 的文件夹,其中我有一个名为 AdminController 的控制器

错误信息: “目标类 [Modules\Admins\Controllers\AdminController] 不存在。”

项目结构 enter image description here

AdminController 文件


namespace Modules\Admins\Controllers;

use App\Http\Controllers\BaseController;
use App\Http\Traits\ApiDesignTrait;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\
    Hash, Validator
;
class AdminController extends BaseController

    public function test()
    
        return true;
    

route.php

use Illuminate\Support\Facades\Route;
use Modules\Admins\Controllers\AdminController;

Route::post('/test',  [AdminController::class, 'test']);

BaseController.php


namespace App\Http\Controllers;

use App\Http\Controllers\Controller;


class BaseController extends Controller




Controller.php


namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController

    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;


【问题讨论】:

如果命名空间正确,请尝试在终端中也运行 composer dump-autoload。 我执行了命令但没有发生变化 @zihad 我想我需要一种方法来注册控制器的路径,或者在某处更改默认路径,但我不知道。 【参考方案1】:

因为您定义的命名空间在应用程序之外,您应该在您的composer.json 文件中自动加载它。

"autoload": 
    "psr-4": 
        "App\\": "app/",
        "Database\\Factories\\": "database/factories/",
        "Database\\Seeders\\": "database/seeders/",
        "Modules\\": "Modules/"
    
,

然后运行composer dump-autoload,它应该可以正常工作了。

【讨论】:

有一个不好的表达式我会修复它,其中 admin 文件夹位于 modules 文件夹和 admin 文件夹内,我创建了视图、模型和控制器文件夹,我将编辑问题。 @mahmoudmohamed 我添加了更新。它将解决您的问题。 终于运行良好,感谢您的帮助【参考方案2】:

需要在路由服务提供者类中更改路由文件的命名空间 在app/Providers/RouteServiceProvider.php你需要编辑开机功能

/**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    
        $this->configureRateLimiting();

        $this->routes(function () 
            Route::middleware('web')
                ->namespace('Modules\\Admins\\Controllers')
                ->group(base_path('routes/route.php'));
        );
    

在你的 route.php 中你可以这样做

Route::post('/test',  'AdminController@test');

如果您不想编辑服务提供者

Route::namespace('Modules\\Admins\\Controllers')->group(function () 
    Route::post('/test', 'AdminController@test');
);

【讨论】:

以上是关于“目标类 [Modules\\Admins\\Controllers\\AdminController] 不存在。”的主要内容,如果未能解决你的问题,请参考以下文章