Как поставить расширение на Yii 2.0 без Composer
24 февраля 2015
Не первый раз спрашивают, как поставить расширение Yii 2.0 без Composer. Отвечаю.
Ставить будем yii2-imperavi-widget.
- Идём в https://github.com/vova07/yii2-imperavi-widget/releases, забираем архив.
- Смотрим его
composer.json
. - Там у нас есть секция autoload, в ней упоминание PSR-4 и
vova07/imperavi
. - Распаковываем файлы в
vendor/vova07/imperavi
. - В
vendor/composer/autoload_psr4.php
добавляем:
'vova07\\imperavi\\' => array($vendorDir . '/vova07/imperavi/src'),
- В
vendor/yiisoft/extensions.php
добавляем:
'vova07/imperavi' => array ( 'name' => 'vova07/imperavi', 'version' => '2', 'alias' => array ( '@vova07/imperavi' => $vendorDir . '/vova07/imperavi/src', ), ),
Всё это делает за вас Composer. Лучше изучите его и не теряйте время.
Комментарии RSS по email OK
Извините конечно, но лучше бы пост сократить до:
Как поставить расширение на Yii 2.0 без Composer Лучше изучите его и не теряйте время.
Спасибо! ) Уже разобрался, но два месяца назад потратил на это время )
Не всегда хочется выносить свой экстеншн/виджет написанный строго под один сайт в гит. Проще оставить его прямо в проекте и прописать неймспейс по psr-4.
учитывая, что папка vendor в игноре :) как вы на продакшен это будете выливать?
очепятка
я не говорил что "оставить в проекте" значит положить в vendor
Берём и убираем из игнора всю папку, и добавляем только не, в которых уверены, что будут установлены заново или обновлены через композер. Глупый аргумент, если честно.
Ручками сделать можно что угодно, мы же программисты. Только есть best practice и некие "стандарты". А можно и на продакшене ручками код писать через ssh конечно
Ткните носом, пожалуйста, на это.
И потом, следовать всему подряд - ни к чему хорошему еще не приводило. Технически нужно мыслить, технически. (с)
Старые дедовские способо разворачивания проекта через ftp.
В таком случае нет смысла хранить код виджета в /vendor. Можно положить его в другой каталог, не связанный с композером.
читайте внимательно комментарии, до того как оставлять свои.
(Касательно комментариев, а не поста) Если это часть приложения, написанная под один сайт, то зачем ее вообще выносить?
Правильнее будет добавлять неймспейс в секцию autoload/psr-4 в composer.json проекта, а потом запустить composer.phar dumpautoload.
Здесь описано: getcomposer.org/doc/01-basic-usage.md#autoloading
Можно попробовать использовать composer.borreli.com/ этот сервис. Скачать архив и скопировать папку в vendor, и посмотреть autoload
Исправьте пути. Там где написано '/vova07/imperavi' нужно '/vova07/imperavi/src'.
Сергей, поправил. Спасибо!
До сих пор на бОльшей куче хостингов нет поддержки composer, или вобще доступа к директории выше /www. Так что не надо пожалуйста про "изучите", "дедовские способы" или "best practice и некие "стандарты"
Андрей, за те же деньги, что стоит большинство хостингов, уже можно взять простенькую VPS-ку и делать с ней всё, что вздумается.
а у меня на хостинге вообще ничего не ставится, т.к. не хватает памяти для composer, толку его изучать...
Problem 1 - onmotion/yii2-gallery 1.1.9 requires bower-asset/blueimp-gallery >=v2.17.0 -> no matching package found.
так и не смог поставить этот blueimp-gallery ( [InvalidArgumentException] Could not find package bower-asset/blueimp-gallery at any version for your minimum-stability (stable). )
пришлось таким ручным методом установить onmotion этот и всё заработало. спасибо
А вообще, почему так мало нормальных extension на yii2?
Внёс изменения в файлы, залил... а дальше?
Вообще composer - вещь очень не надёжная. Я, к примеру, брезгую. В своём проекте я знаю все папки и что и как происходит. Композером что-то куда-то ставится. Мне противно от этого, где-то образуется мрак. Но вопрос не в этом.
Прошу автора статьи дать пояснения относительно того, где используются ключи и значения обоих массивов, которые надо добавить в файлы, а именно, что такое
'vova07\\imperavi\\'
, - строка с двойными обратными слешами, для чего?
array($vendorDir . '/vova07/imperavi/src'), 'vova07/imperavi' => array ( 'name' => 'vova07/imperavi', 'version' => '2', 'alias' => array ( '@vova07/imperavi' => $vendorDir . '/vova07/imperavi/src',
Почему при таком дублировании 'vova07/imperavi' нельзя загнать это в переменную? Почему ключ
'vova07/imperavi'
везде равен ключу значения
'name' => 'vova07/imperavi'
, Зачем делать такое дублирование кода?
Почему все расширения нельзя делать по одному стандарту? Где-то есть папка src, где-то нет. где-то в названиях изаются большие буквы (lysenkobv\GeoIP), где-то нет.
Спасибо.