首页 > 解决方案 > 作曲家 - 找不到类

问题描述

我仍然无法让作曲家工作。当不使用作曲家自动加载时,我可以 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 自动加载语句和 use 语句都不起作用。我在这里查看了无数问题,似乎没有一个与这个确切的情况相匹配。这是在 linux 系统上,我还尝试了文件和文件夹的大小写的各种组合,尽管有些失败,因为作曲家在某些区域不允许大写。

标签: phpnamespacescomposer-php

解决方案


推荐阅读