让控制器从 Laravel 中的非标准目录工作?

Making a controller work from the non-standard directory in Laravel?

我正在创建最终将适用于多个站点的基本代码。我设法轻松地拆分它以支持多个“视图”文件夹,但我不确定如何对控制器执行相同的操作。这是一般结构:

/app/Http/Controllers     <--- standard controller folder
/resources/view           <--- standard view folders

这是我想要的结构:

/sites/ASITE/view         <--- this I got working
/sites/ASITE/Controllers  <--- this I don't know how to get working

如果我在 /app/Http/Controllers 中创建控制器并创建路由:

Route::get('/test', '\App\Http\Controllers\TestController@test')->name('Test');

然后如果我调用 /test 就可以正常工作。但是如果我将它移动到“/sites/ASITE/Controllers”并将命名空间更改为:

sites\ASITE\Controllers;

并制定路线:

Route::get('/test', '\sites\ASITE\TestController@test')->name('Test');

然后我收到错误消息“目标 class [sites\ASITE\TestController] 不存在。”

关于如何让控制器在另一个文件夹中工作有什么想法吗?

\App\Http\Controllers\TestController 并没有告诉 Laravel TestController.php 存在于 App/Http/Controllers 中。它是说 TestController class 在命名空间 App\Http\Controllers.

你会在 TestController.php 中有这样一行:

namespace App\Http\Controllers;

如果您想更改命名空间,您需要在此处进行:

namespace sites\ASITE;

App 命名空间可用而 sites 命名空间不可用的原因是您尚未在 composer.json 中定义 sites 命名空间:

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\": "app/",
        "sites\": "sites/" <<< Add this line here
    }
},