Yii + Composer = Yiicomposer

Писать статьи не очень умею, но очень хочется! Так что простите, если буду выражаться технически неточно!

И так начнём со страшного!

[size="5"]Composer[/size]

Composer (getcomposer.org) — это пакетный менеджер для PHP. И так что же представляет собой пакетный менеджер! Пакетный менеджер это набор программного обеспечения, позволяющего управлять процессом установки, удаления, настройки и обновления различных компонентов программного обеспечения. В нашем случае настраивать приложение без дополнительных плагинов Composer не будет! Про плагины и возможное расширение функционала Composer-а описывать не будем,этому возможно будет посвящена отдельная статья.

Для начала посоветую ознакомиться со следующими статьями:

  1. Composer — менеджер зависимостей для PHP (http://habrahabr.ru/post/145946/)

  2. Простое использование composer в Yii (http://tvorzasp.com/blog/prostoe-ispolzovanie-composer-v-yii/)

И так в двух словах, что же можно делать при помощи Composer?

  1. Скачивать пакеты и их зависимости

  2. Скачивать пакеты, не только с packagist.org(официальный репозиторий), но и из любого git, mercurial, svn или стороннего репозитория (Можно даже организовать свой личный репозиторий!!!)

  3. Работать с версиями, вышеперечисленных репозиториев.

  4. Хранить пакет не только в каком-то из репозиториев, но и в простом zip архиве, на жёстком диске или на вашем личном сервере.

  5. Произвольно оформлять пакет, без занесения его в какой-либо репозиторий строгого описании и т.д. и т.п. ну, в общем, свобода действия - нужна ссылка на архив, правильно описываем его в файле инструкций и всё готово!

  6. Загружать пакеты одной командой - update (при первом запуске нужно выполнить install)

Давайте от сухой теории перейдём к практике.

Нам понадобится следующее программное обеспечение:

  1. Denwer PHP 5.3 (http://www.denwer.ru/)

  2. Дополнительные модули для Denwer-а (http://www.denwer.ru/packages/php5.html)

  3. Git (http://git-scm.com/)

Несколько моментов с установкой и настройкой:

Установка Denwer - мы будем работать с консолью, так что для удобства надо подправить пути, в статье всё описано http://yiiframework.ru/doc/cookbook/ru/install.denwer

В php.ini надо раскомментировать extension=php_openssl.dll

Установите Git как описано в статье http://i-handbook.blogspot.com/2013/07/git-windows.html пункт «Установка Git» (для того чтоб избежать лишних проблем таких как «error git was not found, check that it is installed and in your PATH env».)

Начнём!

Создаём папку (composer-test.com каждый может выбрать любое другое название по душе) под сайт, в директории Y:\home(это через виртуальный диск) или path/to/WebServers/home (это уже кому как нравится)

Создаём в папке composer-test.com текстовый файл composer.json – в данном файле мы и опишем все зависимости. Важно,- данный файл должен называться именно так!

Далее открываем (composer.json) в каком-то текстовом редакторе, у меня например это Notepad++

Пишем инструкции:




{

	"require": {  

		"yiisoft/yii": "1.1.14"

	} ,

	"config":{

		"vendor-dir": "www/protected/vendor"

	}

}



Сохраняем.

В двух словах, что мы сделали:

Запросили пакет "yiisoft/yii" версии "1.1.14", а также сконфигурировали установку, назначив папку для складывания всех пакетов параметра "vendor-dir" с путём "www/protected/vendor", данный путь будет относительно текущей директории(все пакеты будут размещены в папке path/to/WebServers/home/composer-test.com/www/protected/vendor).

Теперь пришло время запустить Composer!

Нажимаем Пуск->Выполнить Команду или нажмите Кнопку Windows + R

Пишем команду «cmd» и наживаем «Enter»

Перед вами открывается консоль

Теперь надо перейти к папке с проектом

cd /d full/path/to/composer-test.com

в моём случае это команда cd /d Y:\home\composer-test.com

атрибут /d – здесь установлен, так как происходит смена диска

Далее устанавливаем сам Composer (тут всё про установку http://getcomposer.org/download/)

Я просто скачиваю Composer в папку

php -r “eval(’?>’.file_get_contents(‘https://getcomposer.org/installer’));”

у меня в консоли выдало следующее

Далее, если всё правильно установлено, выполняем команду

php composer.phar install

у меня в консоли выдало

Смотрим, что же у нас получилось!!!

В папке Y:\home\composer-test.com появилась папка www/protected/vendor, в неё скачался наш первый пакет - "yiisoft/yii" ,который находится в папке -

Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii.

Хочу обратить ваше внимание на то, что название пакета "yiisoft/yii" ("require": {"yiisoft/yii": "1.1.14"})

и название папки, в которую скачался пакет идентичны Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii

ещё раз про структуру, потому что вам необходимо чётко понимать, где пакеты, чтобы лучше ориентироваться в коде

Y:\home\composer-test.com/ - папка в которой находится composer.phar

Y:\home\composer-test.com/www/protected/vendor/ - папка куда складываются все пакеты (по умолчанию /vendor/ но мы переустановили данную папку на "vendor-dir": "www/protected/vendor")

Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii – папка в которую скачался пакет "yiisoft/yii"

Теперь давайте установим, например, yii-booster (http://yiibooster.clevertech.biz/) очень удобная вещь для построения бэкендов и работы с Bootstrap

Находим данное приложение в офф репозитории (https://packagist.org/packages/clevertech/yii-booster)

Я решил поставить версию 2.0.0 значит надо добавить запись в require - "clevertech/yii-booster": "v2.0.0". итак наш файл composer.json будет выглядеть так:




{

	"require": {

		"yiisoft/yii": "1.1.14",

		"clevertech/yii-booster": "v2.0.0"

	},

	"config":{

		"vendor-dir": "www/protected/vendor"

    }

}



Далее набираем в консоли

php composer.phar update – именно update потому что install выполняется только первый раз

у меня в консоле

Теперь в папке Y:\home\composer-test.com/www/protected/vendor/

Находится уже два пакета:

Y:\home\composer-test.com/www/protected/vendor/yiisoft/yii

Y:\home\composer-test.com/www/protected/vendor/clevertech/yii-booster

Вывод

Composer - это очень удобное приложение для сборки инструментов или частей проекта, от вас требуется только правильно оформить файл composer.json

[size="5"]Фаил composer.json и Дополнительные возможности для разработки[/size]

Полное описание схемы формирования можно посмотреть тут http://getcomposer.org/doc/04-schema.md

Основные моменты с которыми вы будете сталкиваться при работе с файлом composer.json :

  1. Работа со сторонними репозиториями

  2. Работа с zip архивами

  3. Наличие дополнительных удобств при разработке

  4. Различие файла для пакета (создание своих библиотек) и проектного

  5. Мелкие настройки

Работа со сторонними репозиториями и zip архивами

За настройку сторонних мест хранения пакетов отвечает параметр repositories в файле composer.json

Пример описания сторонних мест




{

    "repositories": [

        {

            "type": "vcs",

            "url": "https://github.com/some/package"

        },

        {

            "type": "package",

            "package": {

                "name": "smarty/smarty",

                "version": "3.1.7",

                "dist": {

                    "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",

                    "type": "zip"

                }                

            }

        },

		{

            "type": "composer",

            "url": "http://packages.example.com"

        }

    ]

}



В данном примере показано три варианта указания мест хранения пакетов

1 вариант




{

	"type": "vcs",

	"url": "https://github.com/some/package"

}



Здесь описан пакет some/package расположенный на github.com

В пакете необходим файл composer.json с описанием пакета

2 вариант




{

	"type": "package",

	"package": {

		"name": "smarty/smarty",

		"version": "3.1.7",

		"dist": {

			"url": "http://www.smarty.net/files/Smarty-3.1.7.zip",

			"type": "zip"

		}                

	}

}



Здесь описан пакет в произвольной форме, находящийся в zip архиве ему дали название "smarty/smarty"("name": "smarty/smarty") установили версию "3.1.7" ("version": "3.1.7") и путь для скачивания архива("dist": {"url": "http://www.smarty.net/files/Smarty-3.1.7.zip","type": "zip"})

3 вариант




{

	"type": "composer",

	"url": "http://packages.example.com"

}



Ранее я говорил, что есть возможность создания своего личного репозитория, данная запись обозначит поиск пакетов в указанном репозитории.

Если пакет не найден ни в одном из указанных мест, то поиск будет продолжен в официальном репозитории.

Для отключения поиска в официальном репозитории необходимо добавить в список запись:




{

   "packagist": false

}



Пример:




{

	"repositories": [

		{

			"packagist": false

		},

		{

			"type": "composer",

			"url": "http://packages.example.com"

		}

	]

}



Хочу уточнить, что мы только обозначили места, откуда будут скачиваться пакеты, но пока мы их не добавим в раздел "require" пакеты не будут скачены.

Для того чтоб воспользоваться пакетами нам надо в раздел require добавить название пакета и версию.

Пример:




{

    "repositories": [

        {

            "type": "vcs",

            "url": "https://github.com/some/package"

        },

        {

            "type": "package",

            "package": {

                "name": "smarty/smarty",

                "version": "3.1.7",

                "dist": {

                    "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",

                    "type": "zip"

                }                

            }

        }

    ],

	"require":{

		"some/package": "*",

		"smarty/smarty": "3.1.7",

	}	

}



Наличие дополнительных удобств при разработке

Composer позволяет разделить процесс разработки пакета и его использования. При разработке обычно необходимы дополнительные инструменты для тестирования пакета.

Для этого в файле нужно описать переменную require-dev, данная переменная работает как и переменная require, только Composer ею пользуется, если вызвать установку с доп. параметром “–dev”

Консольная комманда выглядит так php composer.phar install --dev

Пример:




{

    "require": {

        "php": ">=5.3.0",

    },

    "require-dev": {

        "phpunit/phpunit": "3.7.*",

    }

}



В данном примере если вызвать установку с параметром –-dev, то в папку скачается доп. пакет phpunit/phpunit.

Различие файла для пакета (создание своих библиотек) и проектного файла

Пакетный файл

Одно обязательное поле "name"

"name": "some_nik/pack_name" – название состоит из двух частей разделённых слешем: первая часть обычно это ник пользователя, а вторая часть это уже выбранное разработчиком название пакета.

Остальные поля не обязательно, но часто используют следующие

"type": "library" – описать тип пакета, по умолчание library

Composer различает несколько типов я их не стану рассматривать, если захотите углубится, то материал тут http://getcomposer.org/doc/04-schema.md#type

"version": "1.0.0" – описать версию пакета

"license": "BSD-3-Clause" – описать лицензию пакета

"description": "text text text" – краткое описание пакета

"authors": [

{


    "name": " name ",


    "email": "email@some.com",


    "homepage": "http://www.some.com "


}

] – в данном разделе можно перечислить авторов проекта

"require": {} – тут и так всё понятно

Проектный файл

В этом файле только требуется перечислить необходимые для сборки пакеты, то есть описать параметр require.

В официальной документации есть такое понятие как (root-only), это как раз относится только к данному файлу.

Вообще разницы между проектным и пакетным файлом нет. Надо понимать, что для разработчика пакет является проектом, а для тех, кто им пользуется пакетом. Для этого и была разработана логика root-only, так как некоторые переменные, такие как require-dev работают только из проектного файла.

Мелкие настройки

Параметры:

minimum-stability (root-only) – доступные значения dev, alpha, beta, RC, stable по умолчанию stable

config (root-only) – это блок параметров настроек. ниже будут перечислены часто используемые:

vendor-dir – указание пути паки для хранения пакетов


bin-dir - указание пути паки для хранения консольных команд

extra – это универсальный блок для хранения каких-то настроек используемых в дополнительных плагинах Composer

Итог по Copmoser-у

Удобен для быстрой сборки необходимых инструментов, не критичен к месту хранения пакетов, возможно лёгкое разделение работы, а также доп. возможности для разработчика.

Единственный минус - нет возможности воспользоваться им, если хостер не предоставил ssh, но можно собрать локально и выгрузить на сервер!!!

Я не упоминал в статье про автоматическую генерацию autoload.php файла, потому что это описано в других статьях и при использовании c Yii нет необходимости.

[size="5"]YiiComposer (https://packagist.org/packages/mihaildev/yiicomposer)[/size]

Острой необходимости в создании данного инсталлера не было, но у меня, как у разработчика работающего с Yii, есть привычки и желание оптимизировать и структурировать работу!

Первое от чего я стремился избавиться это длинные названия, допустим, есть пакет mihaildev/testextension то путь к данному пакету будет следующий

application.vendor.mihaildev.testextension.SomeExtension

Длинновато, не правда ли!

Поэтому я решил ввести свои типы, по умолчанию YiiComposer различает три типа extension, module, framework.

Для того чтоб YiiComposer распознал в пакете один из типов необходимо либо в описании пакета указать тип в формате yii-{type} или yii-{type}-{name} (пример "type": "yii-extension-test" {type} равен extension {name} равен test) либо в настройках путей указать для пакета тип и если необходимо переопределить имя.

Если правильно задать тип, то пакеты в свою очередь сформируют в папке vendor следующую структур:

Для yii-extension-name это vendor/extensions/name

Для yii-module-name это vendor/modules/name

Посудите сами, я не думаю, что вы будете использовать два различных модуля с одинаковым названием в одном проекте, а преимущество, которое предоставляет нововведение, это короткие и более читабельные алиасы.

Добавляем алиасы в список настроек:

‘aliases’=>array(

    'vmodule'=>'application.vendor.modules',


    'vext'=>'application.vendor.extensions'


),

Теперь при установке mihaildev/testextension, у которого тип установлен yii-extension-test, путь выглядит так:

vext.test.SomeExtension

Сравните со старым вариантом:

application.vendor.mihaildev.testextension.SomeExtension

Мелочь, а приятно!!!

Настройка путей и свои типы

В разделе extra можно добавить блок yiicomposer-paths

Где можно переназначить стандартные типы или добавить новые, а также для пакетов, у которых не указан тип

Настройки по умолчанию, которые не обязательно указывать, но при необходимости можно переназначить




"extra":{

	"yiicomposer-paths":{

		"module": "{vendor}/modules/{name}",

		"extension": "{vendor}/extensions/{name}",

		"framework": "{vendor}/framework",

		"yiisoft/yii": "$framework$"			

	}

}



Пути можно образовать несколькими способами

Составное формирование пути, основываясь на следующих переменных:

{vendor} – путь к папке для хранения всех пакетов берётся из основных настроек "vendor-dir"

{type} – тип пакета, если указан (пример yii-extension-test - {type} будет равен extension)

Тип пакета можно указать как в настройках пакета (в файле composer.json параметр "type" пакета) так и в настройках проектного файла в разделе "yiicomposer-paths" как для пакета yiisoft/yii установлен тип framework. Тип задаётся в нескольких форматах для параметра type в пакете yii-{type} или yii-{type}-{name} или в проектном файле в разделе "yiicomposer-paths" в формате ${type}$ или ${type}-{name}$

Если тип пакета задан но не описан в "yiicomposer-paths" то по умолчанию папка "{vendor}/{type}/{name}"

{package} – название пакета оригинальное (пример mihaildev/testextension будет равен mihaildev/testextension)

{name} – название по умолчанию берётся из названия пакета вторая часть (пример "name": "mihaildev/testmodule" {name} равен testmodule), если название установлено в типе пакета, то yiicomposer возьмёт его (пример yii-extension-test - {name} будет равен test) также можно переназначить и в настройках (пример "clevertech/yii-booster": "$extension-yii-booster$" {name} будет равен yii-booster)

Пример использования




{

    "minimum-stability" : "alpha",

    "config":{

        "vendor-dir": "www/protected/vendor"

    },    

     "require": {

		"mihaildev/yiicomposer": "dev-master",

		"mihaildev/testmodule": "dev-master",

		"mihaildev/testextension": "dev-master",

		"yiisoft/yii": "dev-master"

    }

}



Важно чтоб mihaildev/yiicomposer был первым в списке требуемых и был установлен первым!!! Иначе он не сработает.

При тестировании было замечено, что ,если один из пакетов был ранее закеширован, то появляется вероятность установки закешированных пакетов первыми, что приведет к ошибкам в путях.

В примере указан параметр "minimum-stability" : "alpha" потому что данный проект ещё открыт для изменений, я хочу получить окончательную критику и при необходимости доработать

Подстановка

Допустим у нас есть сторонняя библиотека "clevertech/yii-booster", у которой не описан тип.

Мы добавляем запись "clevertech/yii-booster": "$extension-yii-booster$"

Данная форма записи заполняет пробелы информации, которой не хватало для нормальной работы

"$extension-yii-booster$" – выделенная часть укажет, каким правилом надо воспользоваться для формирования пути

"$extension-yii-booster$" – выделенная часть будет использована в правиле как переменная {name},

что в свою очередь позволит получить адрес типа extension и сформирует путь path/to/vendor/extensions/yii-booster

Хочу сказать, что можно было бы сделать и такую запись "clevertech/yii-booster": "$extension$" так как {name} берётся изначально из второй части названия пакета ("clevertech/yii-booster" вторая часть yii-booster) то у нас получился абсолютно такой же результат.

Пример использования:




{

    "minimum-stability" : "alpha",

    "config":{

        "vendor-dir": "www/protected/vendor"

    }, 

	"extra":{

			"yiicomposer-paths":{				

				"extension": "{vendor}/extensions/{name}",

				"clevertech/yii-booster": "$extension-yii-booster$",

				"yiiext/migrate-command": "$extension$"

			}

	},	

     "require": {

		"mihaildev/yiicomposer": "dev-master",

		"mihaildev/testmodule": "dev-master",

		"mihaildev/testextension": "dev-master",

		"yiisoft/yii": "dev-master",

		"clevertech/yii-booster": "v2.0.0",

		"yiiext/migrate-command": "dev-master"

    }

}



Продумывая настройку путей, я старался упростить и увеличить гибкость использования.

Приведу несколько примеров использования

Точное назначение папки




{

    "minimum-stability" : "alpha",

    "config":{

        "vendor-dir": "www/protected/vendor"

    }, 

	"extra":{

			"yiicomposer-paths":{				

				"yiiext/migrate-command": "www/protected/vendor/extensions/migrate-command"

			}

	},	

     "require": {

		"mihaildev/yiicomposer": "dev-master",

		"mihaildev/testmodule": "dev-master",

		"mihaildev/testextension": "dev-master",

		"yiisoft/yii": "dev-master",

		"yiiext/migrate-command": "dev-master"

    }

}



Свои типы




{

    "minimum-stability" : "alpha",

    "config":{

        "vendor-dir": "www/protected/vendor"

    }, 

	"extra":{

			"yiicomposer-paths":{				

				"sometype": "{vendor}/some/{name}"

				"yiiext/migrate-command": "$sometype-hochutut$"

				"mihaildev/testextension": "$sometype-hochutut2$"

			}

	},	

     "require": {

		"mihaildev/yiicomposer": "dev-master",

		"mihaildev/testmodule": "dev-master",

		"mihaildev/testextension": "dev-master",

		"yiisoft/yii": "dev-master",

		"yiiext/migrate-command": "dev-master"

    }

}



В данном примере мы добавили тип "sometype",а также переопределили пути для пакетов,что приведёт к установке пакетов в папки:

yiiext/migrate-command в рath/to/vendor/some/hochutut и

mihaildev/testextension в рath/to/vendor/some/hochutut2

С управлением путей разобрались, перейдём ко второй части YiiComposer

Запуск консольных команд после обновления

В раздел scripts вносим следующую запись

"post-update-cmd": "YiiComposer\\Console::update"

Пример




{

    "minimum-stability" : "alpha",

    "config":{

        "vendor-dir": "www/protected/vendor"

    }, 

	"extra":{

			"yiicomposer-paths":{

				"clevertech/yii-booster": "$extension-yii-booster$",

				"yiiext/migrate-command": "$extension$"

			}

	},	

     "require": {

        "mihaildev/yiicomposer": "dev-master",

		"mihaildev/testmodule": "dev-master",

		"mihaildev/testextension": "dev-master",

		"yiisoft/yii": "dev-master",

		"clevertech/yii-booster": "v2.0.0",

		"yiiext/migrate-command": "dev-master"

    },

	"scripts":{

        "post-update-cmd": "YiiComposer\\Console::update"

    }

}



По умолчанию для запуска консольного приложения используется файл с настройками, находящийся по адресу path/to/vendor/../config/console.php,

так как я предполагаю, что пользователи будут хранить папку vendor в папке protected, но при необходимости можно установить пременную "yiicomposer-console-config" указав путь к файлу с настройками.

Пример:




{

    "minimum-stability" : "alpha",

    "config":{

        "vendor-dir": "www/protected/vendor"

    }, 

	"extra":{

			"yiicomposer-console-config":"www/protected/config/console.php",


			"yiicomposer-paths":{

				"clevertech/yii-booster": "$extension-yii-booster$",

				"yiiext/migrate-command": "$extension$"

			}

	},	

     "require": {

        "mihaildev/yiicomposer": "dev-master",

		"mihaildev/testmodule": "dev-master",

		"mihaildev/testextension": "dev-master",

		"yiisoft/yii": "dev-master",

		"clevertech/yii-booster": "v2.0.0",

		"yiiext/migrate-command": "dev-master"

    },

	"scripts":{

        "post-update-cmd": "YiiComposer\\Console::update"

    }

}



По умолчанию выполняется только одна консольная команда yiic migrate

При необходимости можно добавить или переопределить список запускаемых команд настроив переменную "yiicomposer-console-commands"

Пример:




{

    "minimum-stability" : "alpha",

    "config":{

        "vendor-dir": "www/protected/vendor"

    }, 

	"extra":{

			"yiicomposer-console-config":"www/protected/config/console.php",


			"yiicomposer-console-commands":[

				{

					"controller":"migrate"

				},

				{

					"controller":"test",

					"action": "test",

					"params": {

						"param1": "value1",

						"param2": "value2",

						"param3": "value3"

					}

				}

			],


			"yiicomposer-paths":{

				"clevertech/yii-booster": "$extension-yii-booster$",

				"yiiext/migrate-command": "$extension$"

			}

	},	

     "require": {

        "mihaildev/yiicomposer": "dev-master",

		"mihaildev/testmodule": "dev-master",

		"mihaildev/testextension": "dev-master",

		"yiisoft/yii": "dev-master",

		"clevertech/yii-booster": "v2.0.0",

		"yiiext/migrate-command": "dev-master"

    },

	"scripts":{

        "post-update-cmd": "YiiComposer\\Console::update"

    }

}



Процесс:

Запускаем install (php composer.phar install)– при первом запуске консольные команды не запускаются я специально это сделал для того чтоб после сборки можно было проверить и настроить файл console.php (внести настройки БД и т.д.)

Запускаем update (php composer.phar update)– при втором запуске и последующих запусках консольные команды будут выполняться сразу после успешной сборки.

Ещё думаю проработать работу с языковыми пакетами!!!

В качестве примера использования, я собрал себе заготовку инструментов для создания проектов.

Рассчитан на работу с Денвером, но немного изменив можно и подо что угодно. https://github.com/MihailDev/yii-composer-blank

Как пользоваться заготовкой

Регистрируем на Денвере сайт допустим testproj.com (создаём папку у меня Y:\home\testproj.com)

Скачиваем архив распаковываем так чтоб фаил composer.json был в папке path/to/testproj.com (у меня Y:\home\testproj.com\composer.json)

В консоли переходим в папку Y:\home\testproj.com

Скачиваем туда composer.phar

Запускаем php composer.phar install

Что вы получите:

Главная страница

Страница контактов

Страница о нас

Бэкенд

Приложения

"mihaildev/elfinder" – (виджеты для работы с Файл менеджером http://elfinder.org/ подстраевается под работу с yii-booster)

"mihaildev/filesystem" – набор инструментов для работы с файлами

"mihaildev/backend" – приложение умеющее отделять бэкенд от фронтенда

"mihaildev/oneuser" – маленькое приложения для того чтоб не создавать пользовательский модуль то есть на сайте есть только один пользователь

"clevertech/yii-booster" - http://yiibooster.clevertech.biz/

"yiisoft/yii": "1.1.14" - Yii

"yiiext/migrate-command" – приложение для работы с модульными миграциями

В набор инструментов скоро войдёт приложение для работы с почтой и изображениями.

Я не эксперт. У меня что то получается, что то нет!

Если где то неточно выразился или не так объяснил пишите подправим, статья сложная и обширная.

Хорошая работа!

Очень советую посмотреть вот на это решение и постараться приблизиться к нему

"yiisoft/yii2-composer"

Потому что таков будет yii подход в будущем и чем больше будет на него похож текущий, тем лучше и проще для всех.

В частности там решено это: "application.vendor.mihaildev.testextension.SomeExtension"

И еще много чего.

Согласен! я смотрел данный проект но пока я нормально не пощупаю yii2 я не смогу нормально ничего сделать. Yii2 выйдет весной (по разговорам на форуме) так что думаю я успею исследовать и сделать соответствующие коррекции.

Я изучил "yiisoft/yii2-composer" даже попробовал сделать доработку, но понял её бессмысленность!

Yii2 действительно сильно заточен под Composer так что изучайте!

Я не стану дальше дорабатывать свой проект это бессмысленно. Через пару месяцев выйдет Yii2 там всё прекрасно проработано!!!

Немного о будущей работе с пакетами.

Использование:




{

    "name": "somenik/somename",

    "type": "yii2-extension",

    "require": {

        "yiisoft/yii2": "*"

    },

    "extra": {

        "bootstrap": "path\\to\\BootstrapExtension"

    }

}



Поле "type" у всех должно быть "yii2-extension" не имеет значение будь то модуль или приложение или что то ещё.

Так же можно задать класс для изначальной загрузки ("bootstrap": "path\\to\\BootstrapExtensionClass")

вся информация о приложениях собирается в файле yiisoft/extensions.php

данный файл надо будет просто подключить в нужный конфиг в раздел "extensions"




return [

	'id' => 'basic',

	'basePath' => dirname(__DIR__),

	'extensions' => require(__DIR__ . '/../vendor/yiisoft/extensions.php'),

...

];



далее при запуске проекта происходит инициализация всех приложений и запуск bootstrap классов и только потом происходит остальная работа

Только не путайте инициализацию с изначальной загрузкой!!!

Инициализация происходит раньше там просто прописываются все алиасы и запускаются bootstrap классы (если они указанны)

По поводу консольных команд.

Я плохо изучил апи Composer-а там сказано, что можно просто сделать такого рода запись




{

    "scripts": {        

        "post-update-cmd": [            

            "path/to/yiic <command>",

            "path/to/yiic <command2>"

        ]

    }

}



Для примера добавим миграции




{

    "scripts": {        

        "post-update-cmd": [            

            "path/to/yiic migrate"           

        ]

    }

}



Что надо подучить, чтоб потом было легче:

  1. Composer - очень облегчит жизнь

  2. Переход на работу с пространством имен (Namespace) и стандарт PSR-0

  3. Потихоньку ковырять Yii2