Ответы пользователя по тегу Composer
  • Расширение/наследование автозагрузчика Composer'а?

    @genteelknight
    Fullstack web developer
    В комментах к самому вопросу напихали тебе по самое не хочу и местами даже по делу. Но возможно в твоем случае по другому никак не сделать. Лично я за первый вариант. Самому приходилось патчить загрузчик композера на ряде проектов, примерно так это выглядит:

    <?php
    
    use Composer\Autoload\ClassLoader;
    use function Composer\Autoload\includeFile;
    
    if (file_exists($composerAutoloaderPath = __DIR__ . '/../../../autoload.php')) {
        $patchedLoader = new class(require $composerAutoloaderPath) {
            private $loader;
    
            public function __construct(ClassLoader $loader)
            {
                $loader->unregister();
                $this->loader = $loader;
            }
    
            public function register($prepend = false): void
            {
                spl_autoload_register([$this, 'loadClass'], true, $prepend);
            }
    
            public function unregister(): void
            {
                spl_autoload_unregister([$this, 'loadClass']);
            }
    
            /**
             * Loads the given class or interface.
             * @param string $class The name of the class
             * @return bool True if loaded, null otherwise
             */
            public function loadClass($class): bool
            {
                if ($file = $this->loader->findFile($class)) {
                    includeFile($file);
    
                    // дополнительные патчи здесь
    
                    return true;
                }
    
                return false;
            }
        };
    
        $patchedLoader->register(true);
    }


    Вместо vendor/autoload.php подключаешь файл со своим лоадером.

    Этот вопрос ты можешь адресовать разработчикам пакетов которые я подключаю в своем проекте.


    По этому моменту даже интересно какие пакеты навязывают использование глобального состояния.
    Ответ написан
    1 комментарий