Symfony autowire для сервисов без HttpKernel

Я создаю консольное приложение, используя symfony/console. Теперь я хочу настроить autowire для своих служб, поэтому мне не нужно определять каждую службу в файле services.yml.
Я скопировал много кода из Symfony\Component\HttpKernel\Kernel и Symfony\Bundle\FrameworkBundle\Console\Application, а также из Symfony\Component\HttpKernel\Bundle\Bundle.
Если У меня есть простая команда без внедрения зависимостей. Команда отображается, когда я вызываю исполняемый файл bin / console, но каждая команда, которая требует DI, не отображается.

Поскольку это консольное приложение, которое запускается только через cli, а не через Интернет, я не хочу добавлять накладные расходы на пакет symfony/http-kernel.

Есть ли простой способ сделать это?
Я думал, что в Symfony должна использоваться слабая связь, и это будет легкая задача, но в настоящее время я очень разочарован жесткой связью, которую он использует, и количеством накладных расходов, которые я должен добавить для что-то, что мне кажется основной особенностью фреймворка.


person Eydamos    schedule 02.01.2018    source источник
comment
Компоненты более или менее слабо связаны друг с другом. Но весь смысл пакета фреймворков состоит в том, чтобы упорядоченно соединить компоненты вместе. А ядро ​​- действительно главная точка входа. Я действительно не думаю, что вы сильно сэкономите, катаясь самостоятельно. Особенно, если вы используете Flex, поэтому у вас есть только FrameworkBundle для запуска.   -  person Cerad    schedule 02.01.2018
comment
Почему вы копируете код из Symfony? Почему бы не потребовать это через композитора?   -  person Nico Haase    schedule 02.01.2018
comment
@Cerad Поскольку PHP 5 является обязательным требованием для наших серверов и не будет меняться в ближайшем будущем, я не могу использовать Flex, так как он требует PHP 7.   -  person Eydamos    schedule 03.01.2018
comment
@NicoHaase Потому что, как указано выше, я НЕ хочу, чтобы symfony / http-kernel в моем репозитории, поскольку это ненужные накладные расходы, которые я не буду использовать, но, к сожалению, эти три класса имеют код, который мне нужен для выполнения моих требований   -  person Eydamos    schedule 03.01.2018
comment
@Eydamos Уверен, что вы можете установить Flex для Symfony 3.4, который требует только php 5. Но я не пробовал. Но когда вы запускаете консольное приложение с использованием возможности контейнера autowire без http-ядра, рассмотрите возможность публикации ссылки на репозиторий. Интересно смотреть.   -  person Cerad    schedule 03.01.2018
comment
@Cerad Теперь у меня есть рабочий код. Теперь я уменьшу код до необходимого минимума. После этого я подумаю о том, чтобы предоставить упаковщику комплект. Это может занять пару дней, так как мне также нужно поработать над некоторыми другими задачами.   -  person Eydamos    schedule 03.01.2018
comment
@Cerad Я создал рабочий пакет, который вы можете получить здесь: packagist.org/packages/eydamos / console-bundle   -  person Eydamos    schedule 04.01.2018


Ответы (1)


Поскольку похоже, что для этого нет существующего решения, я создаю небольшой пакет, который может потребоваться через композитор.

Вы можете получить пакет здесь: https://packagist.org/packages/eydamos/console-bundle

Запросы функций и проблемы можно разместить в соответствующем репозитории на github.

Я также планирую выпустить версию для Symfony 4.

person Eydamos    schedule 04.01.2018
comment
Прохладный. Все еще не уверен в ценности этого, и может быть немного больно поддерживать, поскольку S4 меняется. Мое единственное предложение - добавить где-нибудь примечание, подтверждающее, что большая часть кода была скопирована / вставлена ​​из Symfony. Похоже, это вежливо. - person Cerad; 04.01.2018
comment
Правильно, я хотел это сделать, но в конце концов забыл об этом. Я добавлю это сейчас - person Eydamos; 04.01.2018