未找到Composer自动加载类

Rya*_*iss 11 php namespaces autoload composer-php

我有文件夹结构,如:

includes/
  libraries/
    Classes/
      Contact/
        Contact.php
        ContactController.php

admin/
  controllers/
    contact/
      edit.php
Run Code Online (Sandbox Code Playgroud)

Contact.php是我正在尝试使用的文件类.该文件包含.

<?php
namespace Classes;

class Contact {
    function __construct() {
        die('here');
    }
}
Run Code Online (Sandbox Code Playgroud)

我有我的composer.json文件,如:

{
    "autoload": {
        "psr-4": {
            "Classes\\": "includes/libraries/Classes/"
        }
    },
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Contact类edit.phpadmin/controllers/contact/文件位于该文件夹中.我的edit.php文件是这样的:

<?php

use Classes\Contact;

$contact = new Contact();

var_dump($contact);
Run Code Online (Sandbox Code Playgroud)

这个文件包含了vendor/autoload.php文件,但我似乎无法使用该类?

Rus*_*nov 12

Classes/Contact/Contact.php而作曲家规则"Classes\\": "includes/libraries/Classes/"意味着Classes\Contact\Contact阶级,而不是Classes\Contact.

因此,如果您真的想要Classes\Contact类,请将Classes/Contact/Contact.php文件移动到父目录:Classes/Contact.php.

但是,如果该类的所需命名空间路径是Classes\Contact\Contact,则更改use:

use Classes\Contact\Contact;
Run Code Online (Sandbox Code Playgroud)

而且namespace:

namespace Classes\Contact;

class Contact {}
Run Code Online (Sandbox Code Playgroud)

??? composer.json
??? includes
?   ??? libraries
?       ??? Classes
?           ??? Contact
?               ??? Contact.php
??? test.php
??? vendor
    ??? autoload.php
    ??? composer
        ??? autoload_classmap.php
        ??? autoload_namespaces.php
        ??? autoload_psr4.php
        ??? autoload_real.php
        ??? autoload_static.php
        ??? ClassLoader.php
        ??? installed.json
        ??? LICENSE
Run Code Online (Sandbox Code Playgroud)

下面的文件vendor/由作曲家生成.

composer.json

{
    "name": "testpsr4",
    "autoload": {
        "psr-4": {
            "Classes\\": "includes/libraries/Classes"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

test.php的

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Classes\Contact\Contact;

$c = new Contact;
$c->test();
Run Code Online (Sandbox Code Playgroud)

包括/库/班/联系人/ Contact.php

<?php
namespace Classes\Contact;

class Contact {
    public function test () {
        echo __METHOD__, PHP_EOL;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试

composer update
php test.php
Run Code Online (Sandbox Code Playgroud)

产量

Classes\Contact\Contact::test
Run Code Online (Sandbox Code Playgroud)

  • @RuslanOsmanov 我已将其更改为使用新的用途和命名空间,并重新运行“composer dump-autoload”,但没有结果。类仍然没有找到。 (2认同)