Использование нескольких расширений (оболочек) с EasyAdminBundle (Wandi, Alter PHP ...) - PullRequest
0 голосов
/ 04 марта 2020

Я хотел бы использовать расширение Alter PHP , а также расширение Wandi с EasyAdminBundle.

Но мы сталкиваемся с некоторыми проблемами конфигурации обоих в то же время.

У нас был этот файл конфигурации при использовании только Alter Php:

#routes/easy_admin.yaml
easy_admin_bundle:
  resource: '@EasyAdminExtensionBundle/Controller/EasyAdminController.php'
  prefix: /admin
  type: annotation

И было хорошо, когда мы использовали только этот пакет. Однако теперь мы хотим использовать этот пакет, а также тот, который был указан ранее, но он также должен заменить контроллер easyadmin на контроллер из нового пакета.

Таким образом, оба расширения хотят сделать то же самое, и оба расширить BaseAdminController с EasyAdmin .

Как лучше всего использовать оба в одном проекте?

Я нашел решение, сделав собственный контроллер, который расширяет AdminController из Wandi и скопировав методы из AdminController из Alter php внутри Пользовательский контроллер . Однако это странное решение этой проблемы.

1 Ответ

0 голосов
/ 09 марта 2020

Я решил связаться с обоими Alter PHP и Wandi на github и отправить запрос на извлечение их расширений, чтобы использовать trait в их контроллере, чтобы упростить использование нескольких расширений .

Так они оба ответили мне:

Wandi просмотрел мой пиар и слил его с мастером. Теперь он доступен в выпуске 2.0.2 .

Изменить PHP просмотренный мой PR и объединить его с мастером. Теперь он доступен в выпуске 3.0.1

Так что с этими изменениями стало проще использовать оба расширения (и аналогичный EasyAdminExtension), используя эти новые черты:

use Wandi\EasyAdminPlusBundle\Controller\AdminController as WandiController;
use EasyCorp\Bundle\EasyAdminBundle\Controller\EasyAdminController;
use Wandi\EasyAdminPlusBundle\Controller\AdminControllerTrait as WandiTrait;
use AlterPHP\EasyAdminExtensionBundle\Controller\AdminExtensionControllerTrait as AlterPHPTrait;

class CustomAdminController extends EasyAdminController
{
    use AlterPHPTrait, WandiTrait;

    //You may have to solve conflict between those traits

}

У вас может быть несколько проблем, таких как службы, не известные контроллеру, или методы, определенные несколько раз.

Мне просто нужно переопределить getSubscribeedServices в моем контроллере, чтобы добавить те, которые используются Alter PHP и Wandi, а также разрешение конфликта с помощью метода isActionAllowed , определенного в обеих чертах.

use AlterPHP\EasyAdminExtensionBundle\Security\AdminAuthorizationChecker;
use EasyCorp\Bundle\EasyAdminBundle\Controller\EasyAdminController;
use Wandi\EasyAdminPlusBundle\Controller\AdminControllerTrait as WandiTrait;
use AlterPHP\EasyAdminExtensionBundle\Controller\AdminExtensionControllerTrait as AlterPHPTrait;
use Wandi\EasyAdminPlusBundle\Exporter\Configuration\NormalizerConfigPass;
use Wandi\EasyAdminPlusBundle\Exporter\Configuration\PropertyConfigPass;
use Wandi\EasyAdminPlusBundle\Exporter\Configuration\TemplateConfigPass;

class CustomAdminController extends EasyAdminController
{
    use AlterPHPTrait,WandiTrait { AlterPHPTrait::isActionAllowed insteadof WandiTrait; }

    //It is important to set the subscribed services from the trait because they cannot use them otherwise.
    public static function getSubscribedServices(): array
    {
        return \array_merge(parent::getSubscribedServices(), [
            AdminAuthorizationChecker::class, //This one is for AlterPHP and those below for Wandi
            'wandi.easy_admin_plus.exporter.configuration.normalizer_config_pass' => NormalizerConfigPass::class,
            'wandi.easy_admin_plus.exporter.configuration.property_config_pass' => PropertyConfigPass::class,
            'wandi.easy_admin_plus.exporter.configuration.template_config_pass' => TemplateConfigPass::class,
        ]);
    }


}

Мне пришлось изменить services.yaml на быть в состоянии переопределить getSubscribeedServices для Wandi .

#services.yaml
services:
  #...
  Wandi\EasyAdminPlusBundle\Exporter\Configuration\NormalizerConfigPass: '@wandi.easy_admin_plus.exporter.configuration.normalizer_config_pass'
  Wandi\EasyAdminPlusBundle\Exporter\Configuration\PropertyConfigPass: '@wandi.easy_admin_plus.exporter.configuration.property_config_pass'
  Wandi\EasyAdminPlusBundle\Exporter\Configuration\TemplateConfigPass: '@wandi.easy_admin_plus.exporter.configuration.template_config_pass'
...