作曲家PSR4自动加载问题

时间:2016-01-08 12:44:36

标签: php oop composer-php autoload psr-4

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

目前我们不依赖任何外部库(完全由内部编写的旧应用程序),因此作曲家此时仅用于自动加载,但最终将使用第三方软件包,例如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

composer.json:

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

login.php在用户成功登录时调用authenticated.php,并通过身份验证调用我的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的名称空间为:命名空间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,在vendor目录中查看显示我的类已正确定义。来自vendor / composer / autoload_classmap.php:

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

0 个答案:

没有答案