используйте PHPExcel с композитором и Symfony2.2

Я нашел это на SO: Как правильно использовать PHPExcel с Symfony 2

Это работает, но я хочу использовать его с composer. Первую часть я уже решил: загрузить PHPExcel для специального тега (последняя стабильная версия)

Я не понимаю, как получить тег с таким синтаксисом:

"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/umpirsky/SyliusAssortmentBundle"
    }
]

Поэтому я использую нотацию Package:
я выяснил, что reference должно быть именем тега на github. И version не может быть одним и тем же значением (PHPExcel_1.7.8). Кажется, что алфавитные символы не допускаются, поэтому это только версия в виде числа (1.7.8)

"repositories": [{
    "type": "package",
    "package": {
        "name": "PHPOffice/PHPExcel",
        "version": "1.7.8",
        "source": {
            "url": "https://github.com/PHPOffice/PHPExcel.git",
            "type": "git",
            "reference": "PHPExcel_1.7.8"
        }
    }
}]

Следующий шаг я не решил. Я пробовал все комбинации для автозагрузки: psr-0, classmap, разные пути, относительно проекта/поставщика/phpexcel, каждый раз обновлять композитор, но ничего не получалось.

Это работает, только если я поставлю эту строку

$loader->add('PHPExcel', __DIR__.'/../vendor/PHPOffice/PHPExcel/Classes');

в приложение/autoload.php. Я обнаружил, что первая строка (PHPExcel) также может быть пустой строкой: ''.
Есть ли разница, если я использую PHPExcel или ''?

Итак, мой основной вопрос: как мне избежать записи этой строки в autoload.php, помещая эквивалентные команды в composer.json моего проекта?


person timaschew    schedule 24.04.2013    source источник


Ответы (1)


Что касается вашего основного вопроса, проблема заключается в том, что после установки пакета, если вы обновите определение и добавите материал для автозагрузки, запуск composer update ничего не изменит. У Composer все еще есть старый пакет, который уже был установлен в его «кеше», поэтому он использует его для создания автозагрузки, и это не удается.

Чтобы решить эту проблему, вы должны удалить vendor/PHPOffice/PHPExcel напрямую и запустить composer update, который переустановит его с последней информацией из вашего composer.json, включая автозагрузку и т. д. Вы должны указать автозагрузку как таковую:

"repositories": [{
    "type": "package",
    "package": {
        "name": "PHPOffice/PHPExcel",
        "version": "1.8.0",
        "source": {
            "url": "https://github.com/PHPOffice/PHPExcel.git",
            "type": "git",
            "reference": "1.8.0"
        },
        "autoload": {
            "psr-0": {
                "PHPExcel": "Classes/"
            }
        }
    }
}],
"require": {
    "PHPOffice/PHPExcel": "1.8.*",
    ...

Что касается второстепенного вопроса и '' vs 'PHPExcel': '' просто говорит, что в этом каталоге можно найти любое пространство имен. Это означает, что автозагрузчик всегда будет сканировать этот каталог, чтобы найти классы, что удобно, но медленнее, чем явное сопоставление пространств имен с каталогами. Так что оба варианта работают, но более конкретная форма предпочтительнее, особенно в пакетах, которые вы публикуете публично.

person Seldaek    schedule 24.04.2013
comment
что вы имеете в виду под will reinstall it with the latest information from your composer.json, including autoload, etc.? Как включить/включить автозагрузку для PHPExcel, у которого нет собственного composer.json и пространств имен? - person timaschew; 24.04.2013
comment
Как я уже сказал, как только вы это сделаете, вы должны сначала удалить поставщика/PHPOffice, а затем запустить обновление, чтобы заставить его переустановить пакет. - person Seldaek; 25.04.2013
comment
Возможно, вы перепроектировали проблему/решение. Все, что я использую, это: CodePlex/PHPExcel: 1.7.8, по требованию. Нет необходимости в PHPOffice или записи пакета или чего-либо еще в автозагрузке. - person Cerad; 25.04.2013
comment
Именование пакета PHPExcel было обновлено, вы должны использовать phpoffice/phpexcel в composer.json - person domi27; 12.11.2014