Автозагрузка локального каталога - «Класс не найден» - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть умопомрачитель, что я что-то упускаю.У меня есть каталог web, с двумя библиотеками в качестве дочерних каталогов:

/
  web/
    vendor/
      composer/
        autoload_psr4.php
        ...
      autoload.php
    index.php
  lib-one/
    src/
      A.php
  lib-two/
    src/
      B.php

Файлы классов:

A.php

<?php

namespace Org\LibOne;

class A
{

    public function __construct()
    {

    }

}

B.php

<?php

namespace Org\LibTwo;

class B
{

    public function __construct()
    {

    }

}

Я запустил composer update, который генерирует ожидаемый vendor/composer/autoload_psr4.php файл:

vendor / composer / autoload_psr4.php

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Org\\LibOne\\' => array($baseDir . '/../lib-one/src'),
    'Org\\LibTwo\\' => array($baseDir . '/../lib-two/src'),
);

Наконец, внутривеб-каталог У меня есть индексный файл со следующим кодом:

index.php

<?php

include('vendor/autoload.php');

use Org\LibOne\A;
use Org\LibTwo\B;

$a = new A();
$b = new B();

$a назначен экземпляр A просто отлично, а $b ошибки, сказав Class 'Org\LibTwo\B' not found in 'web/index.php line 9'.

Разница только заключается в том, что я добавил Org\LibTwo после того, как код, использующий Org\LibOne, уже функционировал.

У меня проверено пять раз написание, пространство имен, каталоги и т. д. Пожалуйста, помогите вернуть мое здравомыслие.

1 Ответ

0 голосов
/ 13 сентября 2018

Решено! И, конечно, это было простое, но часто игнорируемое решение. В нашем случае мы используем vagrant development box rlerdorf / php7dev . Файл php7dev.yaml содержит сопоставления каталогов, к которым я забыл добавить lib-two, и был слишком сосредоточен на том, что Composer является источником проблемы.

...