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

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

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

Сообщение vano.mig » 2019.04.17, 17:12

Привет, ребята. Делаю проект на первом 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
Сообщения: 1262
Зарегистрирован: 2011.02.14, 11:36

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

Сообщение kukuruku » 2019.04.17, 19:48

через композер

vano.mig
Сообщения: 55
Зарегистрирован: 2016.11.21, 10:25

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

Сообщение vano.mig » 2019.04.18, 10:25

хороший вариант, но в этом проекте не используется композер и инсталить его не можно.
Как быть в данной ситуации?

Аватара пользователя
ElisDN
Сообщения: 5320
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN » 2019.04.18, 12:05

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

В вашем коде хватит одного if с одним str_replace на все 'PhpOffice\PhpSpreadsheet'.

vano.mig
Сообщения: 55
Зарегистрирован: 2016.11.21, 10:25

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

Сообщение vano.mig » 2019.04.18, 12:34

приходится костыль делать.
Понял, спасибо.
Подскажите куда этот if вставить (в init(), создать сласс компонент...)

chesar
Сообщения: 512
Зарегистрирован: 2013.04.10, 17:49

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

Сообщение chesar » 2019.04.18, 12:36

А можете поделиться информацией, почему нельзя использовать композер?

Аватара пользователя
ElisDN
Сообщения: 5320
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN » 2019.04.18, 12:40

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

Ответить