Я относительно новичок в использовании композитора и автозагрузки для организации своего кода. У меня есть репозиторий git и на моей локальной машине, я создал композитор в корневом каталоге моего проекта. Я определил все в композиторе.json, нужно было бежать. Используя «composer install
», все библиотеки автоматически устанавливаются.Автозагрузка композитора не будет работать после развертывания
{
"name": "my/repo",
"description": "bla",
"version": "1.2.3",
"require":
{
"php": "5.6.*",
"geraintluff/jsv4": "1.*",
"lcobucci/jwt": "^3.0"
},
"autoload":
{
"psr-4":
{
"MyNamespace\\": "src/"
}
}
}
Так что - когда я побежал «composer install
» на моей локальной машине, все было в моей автозагрузке коды. Хорошо.
Но теперь мне нужно развернуть все это на другой Linux-системе. Поэтому я вытаскиваю из git и запускаю composer install
. Все библиотеки загружены и файл автозагрузки отображается в vendor/
Однако я не могу использовать автозагрузку (да, я сделал require_once(__DIR__ . '/../vendor/autoload.php');
). Everytime я пытаюсь instantiaze класса, я получаю
PHP Fatal error: Class 'X' not found in /var/www/bla/x.class.php on line 123
Использование use X;
не решает проблему, а также не пытается создать экземпляр класса с полным именем пространства имен (например, $x = new \A\B\X();
)
Вот папка структура (если это имеет значение):
+ src/
| + X.class.php // namespace here is "MyNamespace"
| + Y.class.php // same namespace
+ test/
+ run.php // namespace is "Test"
Вот отрывок из этого кода (run.php):
<?php namespace Test; // different namespace than the rest of the code
// making the namespace also "\MyNamespace" wouldnt work either
require_once(__DIR__ . '/../vendor/autoload.php');
use \MyNamespace\Y; // whether this line is here or not does not change the error
session_start();
// same error as with "just" implements Y {}
class SomeClass implements \MyNamespace\Y {
// ...
}
?>
Итак, здесь возникает фатальная ошибка для линии, где Y расширен. Независимо от того, использую ли я полное пространство имен или нет. Единственное, что поможет, - require_once() ...
Итак, это заставляет меня вернуться к громоздкому способу выполнения всех требований/включает меня !? Есть ли способ решить это?
PS: composer dumpautoload
не поможет
PPS: composer validate
не показывает никаких ошибок
Публикация фрагмента кода PHP, который дает вам эту ошибку, поможет устранить неполадки. – wogsland
Кроме того, сообщение об ошибке 'composer.json', ответственное за автозагрузку класса, необходимо для оценки любых ошибок. – Sven
Спасибо, что ответили, но это уже было решено. Композитор.json также уже указан выше – Xenonite