Интерфейс ядра Symfony в пользовательском пакете - PullRequest
0 голосов
/ 19 октября 2019

Я работаю с Symfony4. Я следую этому руководству , чтобы создать собственный пакет. Все отлично работаетС этого момента я хочу использовать KernelInterface в своем комплекте. Как я могу добавить некоторые службы (например, ядро) в свой пакет?

Я пытался добавить ядро ​​в свой пакет services.yml

<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://symfony.com/schema/dic/services
    http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
    <service id="lilworks.youtubedl" class="Lilworks\YoutubeDlBundle\LilworksYoutubeDl" public="true">
        <argument type="service" id="kernel" />
    </service>
    <service id="Lilworks\YoutubeDlBundle\LilworksYoutubeDl" alias="lilworks.youtubedl" public="true"/>
</services>

<?php
namespace Lilworks\YoutubeDlBundle;


use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\KernelInterface;

class LilworksYoutubeDl
{
  private $foo;
  private $bar;
  private $kernel;

public function __construct($foo,$bar,KernelInterface $kernelInterface)
{
    $this->foo = $foo;
    $this->bar = $bar;
    $this->kernel = $kernelInterface;

}

}

1 Ответ

1 голос
/ 19 октября 2019

Поэтому мне пришлось установить для моего параметра конфигурации 1 и 2 и оставить 0 для требуемого сервиса

class LilworksYoutubeDlExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {

        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.xml');

        $configuration = $this->getConfiguration($configs, $container);
        $config = $this->processConfiguration($configuration, $configs);

        $definition = $container->getDefinition('lilworks.youtubedl');

        $definition->setArgument(1, $config['foo']);
        $definition->setArgument(2, $config['bar']);

    }
    public function getAlias()
    {

        return 'lilworks_youtubedl';
    }
}

В моем services.yml

<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services
        http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="lilworks.youtubedl" class="Lilworks\YoutubeDlBundle\LilworksYoutubeDl" public="true">
            <argument type="service" id="kernel" />
        </service>
        <service id="Lilworks\YoutubeDlBundle\LilworksYoutubeDl" alias="lilworks.youtubedl" public="true"/>
    </services>
</container>

И в конструкторерасслоение

class LilworksYoutubeDl
{
    private $foo;
    private $bar;
    private $kernel;

    public function __construct(KernelInterface $kernelInterface,$foo,$bar)
    {
        $this->foo = $foo;
        $this->bar = $bar;
        $this->kernel = $kernelInterface;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...