0

我正在尝试在我的项目中实现 PSR-4 自动加载。这是我继承的一个现有应用程序,目前不使用 OOP(它都是脚本化的),但我希望随着时间的推移进行重构以使用 OOP,而 PSR-4 对我来说至关重要,因为它最终将成为一个大型项目.

目前我们不依赖任何外部库(完全内部编写的旧应用程序),因此此时 composer 仅用于自动加载,但最终将使用第三方包,例如 phpunit。

我的服务器上的应用程序结构如下所示:

/var/www/appurl/
│   composer.json
│  
├───htdocs
│   ├───AppName
│   │   ├───admin
│   │   │       authenticated.php
│   │   │       init.php
│   │   │       login.php
│   │   │       
│   │   └───php
│   │       └───search.php
│   └───Framework
│       ├───Helpers
│       │   └───OSHelpers.php
└───vendor
    │   autoload.php
    │  
    └───composer
            autoload_classmap.php
            autoload_namespaces.php
            autoload_psr4.php
            autoload_real.php
            ClassLoader.php

作曲家.json:

{
    "autoload": {
        "psr-4": {
           "Framework\\": "htdocs/Framework"
        }
    }
}

当用户成功登录时 login.php 调用 authenticated.php ,并且 authenticated 调用我的 init.php 脚本,其中包含:

<?php

require_once('../../../vendor/autoload.php');

?>

是 search.php 有错误。用户通过身份验证后会被重定向到 search.php。

search.php 有以下几行:

 use Framework\Helpers\OSHelpers;
 $current_os = OSHelpers::GetConciseOSFromUserAgent($user_agent);

OSHelpers.php 命名空间为:namespace Framework\Helpers;

如果使用require_once ,则对 OSHelpers 的静态调用可以正常工作,但是我定义 $current_os 的第二行似乎失败了。

我收到的错误是:

Fatal error: Class 'Framework\Helpers\OSHelpers' not found in /var/www/appurl/htdocs/AppName/php/search.php on line 829

我对它为什么这样做有点茫然?当我按照此视频 ( https://www.youtube.com/watch?v=VGSerlMoIrY ) 中的示例进行操作时,我的示例应用程序运行良好,但尝试以稍微复杂的结构复制它会给我带来问题。

我已经完成了 composer dump-autoload -o,在供应商目录中查看显示我的类定义正确。从供应商/作曲家/autoload_classmap.php:

'Framework\\Helpers\\OSHelpers' => $baseDir . '/htdocs/Framework/Helpers/OSHelpers.php',
4

0 回答 0