Slim3 - 容器:Class 未找到
Slim3 - Container: Class not found
我的源码结构:
- 来源
- 控制器
- controller.php
- 授权
- AuthController.php
- 用户
- UserController.php
- 型号
composer.json:
"autoload": {
"psr-4": {
"App\": "src/"
}
},
AuthController.php:
<?php
namespace App\Controllers\Auth;
use App\Models\User;
use App\Controllers\Controller;
class AuthController extends Controller
{
...
}
UserController.php:
<?php
namespace App\Controllers\User;
use App\Models\User;
use App\Controllers\Controller;
class UserController extends Controller
{
...
}
在 Slim 应用中:
$container = $app->getContainer();
$container['AuthController'] = function ($container){
return new App\Controllers\Auth\AuthController($container);
};
$container['UserController'] = function ($container){
return new App\Controllers\User\UserController($container);
};
从 UserController 调用函数时出现错误:
Class 'App\Controllers\User\UserController' 未找到
同时 IntelliJ 标记代码并给出通知:Undefined class UserController.
使用 AuthController 工作正常。
我认为我的命名空间有误,但我不确定如何更改它。
我也有运行:
composer dump-autoload -o
您正在使用 Controllers
作为命名空间 class。但是在您的目录结构中 controller
是小写的。您必须将 controllers
目录名称大写为 Controllers
。然后你的命名空间就可以使用了。
我的源码结构:
- 来源
- 控制器
- controller.php
- 授权
- AuthController.php
- 用户
- UserController.php
- 型号
- 控制器
composer.json:
"autoload": {
"psr-4": {
"App\": "src/"
}
},
AuthController.php:
<?php
namespace App\Controllers\Auth;
use App\Models\User;
use App\Controllers\Controller;
class AuthController extends Controller
{
...
}
UserController.php:
<?php
namespace App\Controllers\User;
use App\Models\User;
use App\Controllers\Controller;
class UserController extends Controller
{
...
}
在 Slim 应用中:
$container = $app->getContainer();
$container['AuthController'] = function ($container){
return new App\Controllers\Auth\AuthController($container);
};
$container['UserController'] = function ($container){
return new App\Controllers\User\UserController($container);
};
从 UserController 调用函数时出现错误:
Class 'App\Controllers\User\UserController' 未找到
同时 IntelliJ 标记代码并给出通知:Undefined class UserController.
使用 AuthController 工作正常。
我认为我的命名空间有误,但我不确定如何更改它。
我也有运行:
composer dump-autoload -o
您正在使用 Controllers
作为命名空间 class。但是在您的目录结构中 controller
是小写的。您必须将 controllers
目录名称大写为 Controllers
。然后你的命名空间就可以使用了。