如何让 composer PSR-4 自动加载器自动加载正在扩展到自动加载的类的类?

How can I get composer PSR-4 autoloader to autoload a class that is extending on to a class that was autoloaded?

提问人:Azur_Was_here 提问时间:8/26/2023 更新时间:9/16/2023 访问量:22

问:

错误信息 Fatal error: Uncaught Error: Class "Core\Controller" not found in C:\xampp\htdocs\Simple_App\src\Controllers\LoginController.php:7 Stack trace: #0 C:\xampp\htdocs\Simple_App\src\Core\Router.php(38): require() #1 C:\xampp\htdocs\Simple_App\public\index.php(14): Core\Router->route('/Simple_App/pub...', 'GET') #2 {main} thrown in C:\xampp\htdocs\Simple_App\src\Controllers\LoginController.php on line 7

似乎 LoginController 无法扩展到 Controller,但对我来说一切看起来都正确?

namespace Controllers;

use Core\Controller;

class LoginController Extends Controller {
    // Code Stuff Here
}

Core 与 LoginController.php 所在的文件夹位于同一父目录中。我的composer.json自动加载器看起来像这样。

"autoload": {
    "psr-4": {
        "Core\\": "src/Core/"
    }
}

这是我的索引.php页面

<?php
declare(strict_types=1);
session_start();

require_once __DIR__ . '/../vendor/autoload.php';
require_once '../src/Core/init.php';

use Core\Router;
$router = new Router();

$path = $_SERVER['REQUEST_URI'];
$method = $_POST['_method'] ?? $_SERVER['REQUEST_METHOD'];

$router->route($path, $method);
php oop 命名空间

评论

0赞 icecub 8/26/2023
该类是在创建 Composer 自动加载后添加的吗?如果是这样,你跑了吗?之后它不会加载添加到 Core 目录的任何类,除非您通过 CLI 转储自动加载composer dump-autoload
1赞 Azur_Was_here 8/26/2023
我发现了问题。它在我的 Controller 类中。我没有申报财产并犯错

答:

0赞 Azur_Was_here 9/16/2023 #1

问题也出在 LoginController 扩展的类内部,我有一个未定义的属性并且出错了。如果文件有语法错误,则不能要求文件并运行它,因此请确保没有任何错误。