У меня есть ситуация, когда я был вынужден использовать что-то, что ДОЛЖНО быть пакетом composer в моем проекте Laravel, вместо этого, как часть моих файлов проекта (пакет composer, насколько я могу сказать, что содержит ошибки, которые я не могу устранить, и я использую папку с аналогичными файлами php, которые предоставил мне мой коллега)
Я постараюсь дать как можно больше контекста:
Я установил все файлы в папку в этом каталоге: \app\Channels\V1\Helpers\MarketplaceWebService\
. Файлы похожи на этого проекта , но отличаются
Чтобы загрузить классы из указанной выше папки, я добавил строку в мой файл composer. json. :
"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories",
"app/Channels/V1/Helpers/MarketplaceWebService"
]
},
Эта последняя строка в массиве classmap - я использовал ее для загрузки своих классов в свой проект, так что теперь я могу требовать их через use MarketplaceWebService_Client;
в верхней части любого из моих обычных laravel files
Теперь для многих случаев это работает - я могу инициировать классы, и они извлекаются из правильного места.
Однако, каждый раз, когда я использую один из MarketplaceWebService, у которого есть относительный require_once
, он не работает
У меня есть еще один пакет composer от того же парня по имени amazon-mws-orders
, и он выглядит на основании полученного сообщения об ошибке, что эти относительные require_once
вызовы по какой-то странной причине сделаны относительно этого пакета, а не относительно расположения файла, в котором я нахожусь.
Так, например, если файл имеет require_once ('Interface.php');
, а Interface.php
находится в та же папка, что и этот файл, он работает просто отлично, НО если файл имеет require_once ('../Model.php')
, я получаю это прекрасное сообщение:
500 - {"message":"MarketplaceWebService_Client::main():
Failed opening required '../Model.php'
(include_path='/home/devchannelapi/laravel/vendor/tilleuls/amazon-mws-orders/src:.:/opt/alt/php72/usr/share/pear')",exception":"Symfony\\Component\\Debug\\Exception\\FatalErrorException",
"file":"/home/devchannelapi/laravel/app/Channels/V1/Helpers/MarketplaceWebService/Model/SubmitFeedResponse.php","line":22
И я установил некоторые точки останова в Xdebug, и это, фактически, строка 22 на /Model/SubmitFeedResponse.php
, где написано require_once('../Model.php')
, и Класс Model.php
действительно находится на один каталог выше этого файла, поэтому можно ожидать, что оператор require_once сработает. И на самом деле, если я сделаю копию Model.php
и поместу ее в папку /Model
, и изменим инструкцию require на require_once('Model.php')
, это на самом деле работает! Но всякий раз, когда я оставляю относительное требование, оно выдает мне сообщение об ошибке, как указано выше, как будто оно ищет относительное требование в /home/devchannelapi/laravel/vendor/tilleuls/amazon-mws-orders/src
Теперь я уже сделал composer dump-autoload
, я не знаю достаточно о Laravel загрузке классов, чтобы понять, почему еще это может происходить.
Любая помощь будет оценена.