Как расширить конкретный файл стороннего пакета в приложении Symfony?

Так что у меня есть этот сайт, который использует ezPublish (который сам основан на Symfony 2.8).

Чтобы сделать это просто, у меня есть этот файл BinaryContent.php который содержит класс BinaryContent расположен в :

/vendor/ezsystems/ezpublish-kernel/eZ/Publish/Core/REST/Server/Controller
где / является корнем проекта (который содержит app/, src/, web/ папки и тд).

Я намерен изменить BinaryContent.php реализовать мою собственную конкретную логику в данном методе. Таким образом, я выбираю переопределение этого файла путем расширения пакета.

Следовательно:

  • Я попытался расширить пакет согласно Документация Symfony но ясно, что:

    Переопределение контроллеров таким образом работает только в том случае, если пакет ссылается на контроллер, использующий стандарт FOSUserBundle: Регистрация: зарегистрировать синтаксис в маршрутах и ​​шаблонах. Это лучшая практика.

Я уже знаю, что нет.

  • Я нашел в services.yml этого пакета, что этот класс зарегистрирован в качестве службы:
ezpublish_rest.controller.binary_content:
класс: "% ezpublish_rest.controller.binary_content.class%" родитель: ezpublish_rest.controller.base
аргументы:
- "@ ezpublish.fieldType.ezimage.variation_service"

вместе с

параметры:
ezpublish_rest.controller.binary_content.class: eZ \ Publish \ Core \ REST \ Server \ Controller \ BinaryContent

Поэтому я попытался зарегистрировать тот же сервис в своем классе, но безрезультатно. При посещении приложения мой BinaryContent.php файл не выполняется (я намеренно оставил ошибку разбора, чтобы прояснить ситуацию).

Что я должен делать?


Согласно комментарий Айнна, Вот как я пытаюсь переопределить службу.

В моем services.yml файл:

ezpublish_rest.controller.binary_content:
класс: Smile \ CoreBundle \ Core \ REST \ Server \ Controller \ BinaryContent
родитель: ezpublish_rest.controller.base
аргументы:
- "@ ezpublish.fieldType.ezimage.variation_service"

Мой пользовательский пакет приложений называется после EzPublishCoreBundle в AppKernel.php,

Вот определение BinaryContent учебный класс:

<?php
namespace Smile\CoreBundle\Core\REST\Server\Controller;

use eZ\Publish\Core\REST\Server\Controller\BinaryContent as BaseController;

class BinaryContent extends BaseController {}

1

Решение

Создайте проход компилятора, который изменяет класс определения сервиса.

final class ReplaceBundleServicePass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$serviceDefinition = $container->getDefinition('bundle_service');

$serviceDefinition->setClass(MyOwnClass::class);
}
}

Добавление пропусков компилятора и когда он запускается, можно найти в официальной документации:
https://symfony.com/doc/current/components/dependency_injection/compilation.html#components-di-compiler-pass

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector