我仍然无法让作曲家工作。当不使用作曲家自动加载时,我可以require_once类文件并实例化一个对象。但是,当尝试使用自动加载时,我收到此错误:
PHP Fatal error: Uncaught Error: Class 'MyCompany\User' not found in /var/www/html/portal/login.php:7
Stack trace:
#0 {main}
thrown in /var/www/html/portal/login.php on line 7
login.php看起来像这样:
<?php
require_once __DIR__ . "/vendor/autoload.php";
use MyCompany\User;
$user = new User();
当前的composer.json如下所示:
{
"autoload": {
"psr-4": {
"MyCompany\\User\\": "vendor/mycompany/user/"
}
},
"require": {
"mycompany/user": "dev-master"
},
"repositories": [
{
"packagist.org": false
},
{
"type": "vcs",
"version": "master",
"url": "git@mysrc.example.com:/opt/git/phplib/classes/User.git"
}
]
}
User.php文件是这样的:
<?php
namespace mycompany;
class User {
function __construct() {
print "composer has done something\n";
}
} //end class User
?>
最后,文件夹结构为:
portal\
composer.json
login.php
vendor\
mycompany\
\user\User.php
\pdo\PDO.php
\page\Page.php
以某种方式命名空间似乎是潜在的问题,但是我不确定如何设置它以支持此结构。最终,即使名称空间是“ mycompany”,也可以,但是在类,composer.json autoload语句和use语句中没有名称空间的组合都可以使用。我在这里浏览了无数问题,但似乎没有一个与这种情况完全相符。这是在Linux系统上,我还尝试了文件和文件夹的大写和小写的各种组合,尽管有些失败,因为作曲家不允许在某些区域使用大写。