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