未找到Composer自动加载类

时间:2016-10-19 09:00:35

标签: php namespaces composer-php autoload

我的文件夹结构如下:

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

admin/
  controllers/
    contact/
      edit.php

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

<?php
namespace Classes;

class Contact {
    function __construct() {
        die('here');
    }
}

我的composer.json文件如下:

{
    "autoload": {
        "psr-4": {
            "Classes\\": "includes/libraries/Classes/"
        }
    },
}

我正在尝试使用Contact类的文件是edit.php文件夹中的admin/controllers/contact/。我的edit.php文件就像:

<?php

use Classes\Contact;

$contact = new Contact();

var_dump($contact);

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

1 个答案:

答案 0 :(得分:9)

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;

namespace

namespace Classes\Contact;

class Contact {}

实施例

├── 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

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

<强> composer.json

{
    "name": "testpsr4",
    "autoload": {
        "psr-4": {
            "Classes\\": "includes/libraries/Classes"
        }
    }
}

<强> test.php的

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

use Classes\Contact\Contact;

$c = new Contact;
$c->test();

<强>包括/库/类别/联系/ Contact.php

<?php
namespace Classes\Contact;

class Contact {
    public function test () {
        echo __METHOD__, PHP_EOL;
    }
}

<强>测试

composer update
php test.php

<强>输出

Classes\Contact\Contact::test