Подключить екстеншн с неймспейсами

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
vano.mig
Сообщения: 73
Зарегистрирован: 2016.11.21, 10:25

Подключить екстеншн с неймспейсами

Сообщение vano.mig »

Привет, ребята. Делаю проект на первом Yii, столкнулся с проблемой. Нужно сделать выгрузку в xls, для этоговзял вот библиотеку
https://github.com/PHPOffice/PhpSpreadsheet
столкнулся с проблемой - как ее подключить, она использует неймспейсы.
Пытался их отпарсить

Код: Выделить всё

public static function autoload($class)
    {
        if( 0 === strpos($class, 'PhpOffice\PhpSpreadsheet') ){

            $class = str_replace('PhpOffice\PhpSpreadsheet', '', $class);
            $class = ltrim($class, '\\');
            $path = __DIR__.'/src/PhpSpreadsheet/'.str_replace('\\', '/', $class).'.php';

            if (!file_exists($path)) {
                return;
            }

            require_once $path;
        }
        elseif( 0 === strpos($class, 'PhpOffice\PhpSpreadsheet\Calculation\Calculation') ){

            $class = str_replace('PhpOffice\PhpSpreadsheet\Calculation\Calculation', '', $class);
            $class = ltrim($class, '\\');
            $path = __DIR__.'/src/PhpSpreadsheet/Calculation/Calculation/'.str_replace('\\', '/', $class).'.php';

            if (!file_exists($path)) {
                return;
            }

            require_once $path;
        }elseif( 0 === strpos($class, 'PhpOffice\PhpSpreadsheet\Style') ){
            $class = str_replace('PhpOffice\PhpSpreadsheet\Style', '', $class);
            $class = ltrim($class, '\\');
            $path = __DIR__.'src/PhpSpreadsheet/Style/'.str_replace('\\', '/', $class).'.php';

            if (!file_exists($path)) {
                return;
            }

            require_once $path;
        }
        elseif( 0 === strpos($class, 'PhpOffice\PhpSpreadsheet\Worksheet') ) {
            $class = str_replace('PhpOffice\PhpSpreadsheet\Worksheet', '', $class);
            $class = ltrim($class, '\\');
            $path = __DIR__ . 'src/PhpSpreadsheet/Worksheet/' . str_replace('\\', '/', $class) . '.php';

            if (!file_exists($path)) {
                return;
            }

            require_once $path;
        }
        else{
            parent::autoload($class);
        }
    }

    /**
     * Configure autoloading using Swift Mailer.
     *
     * This is designed to play nicely with other autoloaders.
     *
     * @param mixed $callable A valid PHP callable that will be called when autoloading the first Swift class
     */
    public static function registerAutoload($callable = null)
    {
        if (null !== $callable) {
            self::$inits[] = $callable;
        }

        Yii::registerAutoloader(['Spreadsheet','autoload']);
    }
но ккак и куда правильно вставить эти функции не понимаю. Прошу помощи
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: Подключить екстеншн с неймспейсами

Сообщение kukuruku »

через композер
vano.mig
Сообщения: 73
Зарегистрирован: 2016.11.21, 10:25

Re: Подключить екстеншн с неймспейсами

Сообщение vano.mig »

хороший вариант, но в этом проекте не используется композер и инсталить его не можно.
Как быть в данной ситуации?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Подключить екстеншн с неймспейсами

Сообщение ElisDN »

Либо ставить композер, либо костылить. Так и быть.

В вашем коде хватит одного if с одним str_replace на все 'PhpOffice\PhpSpreadsheet'.
vano.mig
Сообщения: 73
Зарегистрирован: 2016.11.21, 10:25

Re: Подключить екстеншн с неймспейсами

Сообщение vano.mig »

приходится костыль делать.
Понял, спасибо.
Подскажите куда этот if вставить (в init(), создать сласс компонент...)
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Подключить екстеншн с неймспейсами

Сообщение chesar »

А можете поделиться информацией, почему нельзя использовать композер?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Подключить екстеншн с неймспейсами

Сообщение ElisDN »

vano.mig писал(а): 2019.04.18, 12:34 Подскажите куда этот if вставить (в init(), создать сласс компонент...)
Оставить в вашем autoload(...) только первый if вместо четырёх написанных.
Ответить