Laravel 5.1 Package Development - загрузка зависимостей пакетов в разработке
Привет я пытаюсь разработать пакет в Laravel 5.1. Благодаря помощи здесь у меня есть основы.
моя текущая проблема заключается в том, как загружать зависимости для пакета во время его разработки.
в пакетах composer.json
я добавил зависимости и теперь они установлены в папке поставщика в папке разработки пакетов. Это не корневая папка поставщика Framework.
вот мой раздел require пакетов composer.json
:
"require": {
"illuminate/support": "~5.1",
"php" : ">=5.3.0",
"google/apiclient": "dev-master"
},
поскольку они не являются частью основного процесса автоматической загрузки, каков наилучший подход к обеспечению правильной загрузки зависимостей для моего пакета из папки разработки? Как включить автозагрузку? Я обеспокоен тем, что если я ссылаюсь на их текущее местоположение/пространство имен, которое он сломает, когда позже будет установлен как пакет в другом приложении.
в моем коде у меня есть следующие:
$client = new Google_Client($config);
что дает ошибка:
Class 'Google_Client' not found
Я могу обойти это, добавив эту зависимость к основному композитору.json, но не думаю, что это правильный подход, чтобы держать разработку пакета независимой (если это имеет смысл)
когда я развивался в L4.2 был верстак, который позаботился о загрузке, которая, конечно, больше не работает в L5.1
любая помощь и лучшая практика оценили
1 ответов
потому что они не являются частью основного процесса автозагрузки
Я думаю, вы неправильно поняли, как управляются зависимости композитора. Когда в основной текст.JSON-файл вы перечисляете зависимость, composer добавит его в основной процесс автозапуска, а также все их зависимости и зависимости их зависимостей и так далее рекурсивно.
вам не нужно беспокоиться о том, где хранятся зависимости или как Composer их загрузит. Composer автоматически добавит их в файл автозапуска и все, что вам нужно сделать, это убедиться, что вам нужен композитор автозагрузку файл. Как только вам потребуется файл автозапуска composer, будут доступны все классы и функции, загруженные composer. Все, что вам нужно сделать, чтобы использовать классы из любого из установленных пакетов, - это убедиться, что вы обращаетесь к ним с помощью соответствующего пространства имен. Композитор достаточно умен, чтобы знать, где все классы хранятся и как их загрузить (то есть какие psr-0, psr-4,... за).
поэтому, если вы разрабатываете пакет Composer, давайте назовем его "A", и вы перечислите пакет " C "как одну из зависимостей вашего пакета "A", composer добавит его в файл автозапуска для вас. Если вы используете другой пакет, скажем, Laravel, который имеет зависимость от вас пакет "A", то также пакет " C "будет доступен в Laravel, так как это зависимость от "A".
т. е.: если это ваш композитор.файл json
{
"name": "foo/bar",
"require": {
"google/apiclient": "1.0.*"
}
}
этот код будет работать
require_once __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$youtube = new Google_Service_YouTube($client);
обратите внимание, я требовал композитор файл автозагрузки, который, кажется, вашу проблему. Когда вы используете Laravel, он добавит этот файл для вас.