Страница 1 из 1

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

Добавлено: 2019.04.17, 17:12
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']);
    }
но ккак и куда правильно вставить эти функции не понимаю. Прошу помощи

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

Добавлено: 2019.04.17, 19:48
kukuruku
через композер

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

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

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

Добавлено: 2019.04.18, 12:05
ElisDN
Либо ставить композер, либо костылить. Так и быть.

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

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

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

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

Добавлено: 2019.04.18, 12:36
chesar
А можете поделиться информацией, почему нельзя использовать композер?

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

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