Если Вы пишете различные проекты, то зачастую, появляются части кода, которые повторяются от проекта к проекту. Конечно можно копировать код и переносить в новые проекты, но наиболее оптимальным вариантом является создание расширения и подключение к проектам через composer.
Для примера, создадим расширение, которое включает в себя компонент для получения профиля пользователя (ФИО, дату рождения). Итак, приступим:
Подготовка:
Создадим миграцию и AR-модель app\models\UserProfile
:
$this->createTable('user_profile', [
'id' => $this->primaryKey(),
'name' => $this->string()->notNull(),
'surname' => $this->string()->notNull(),
'birhday' => $this->date()
]);
1 шаг. Регистрируемся в github (https://github.com/) и packagist (https://packagist.org/). Теперь ваш логин <username>
от гитхаба можно использовать в качестве vendorname
. На гитхабе создадим новый пустой репозиторий, назовем его yii2-profile
.
2 шаг. Воспользуемся генератором расширений gii, заполняем все поля согласно подсказкам:
- Vendor Name:
<username>
, например,alpiiscky
- Package Name:
<название расширения>
, например,yii2-profile
- Namespace:
<username>\<краткое название расширения>
, например,alpiiscky\profile\
- Type:
yii2-extension
- License:
MIT
- Title:
<название расширения>
- Description:
<описание расширения>
- Author Name:
<ваше имя>
- Author Email:
<ваш email>
- Output Path:
<папка, где будем разрабывать расширение>
, например,@app/runtime/tmp-extensions
Нажимаем Preview
и Generate
3 шаг. Далее, открываем файл composer.json
основного проекта и внесем правки в раздел repositories
:
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
},
{
"type": "path",
"url": "runtime/tmp-extensions/yii2-profile"
}
]
4 шаг. Создадим компонент ProfileComponent
в корневой папке нашего расширения:
<?php
namespace alpiiscky\profile;
use yii\base\Component;
use app\models\UserProfile;
class ProfileComponent extends Component
{
/**
* @var string
*/
public $userClass = 'app\\models\\User';
/**
* @var string
*/
public $name = '';
/**
* @var string
*/
public $surname = '';
/**
* @var UserProfile
*/
protected $profile;
/**
* @var string
*/
public $birthday = '';
public function __construct($config = [])
{
$profile = UserProfile::findOne(\Yii::$app->user->id);
if ($profile) {
$this->name = $profile->name;
$this->surname = $profile->surname;
$this->birthday = $profile->birthday;
}
parent::__construct($config);
}
}
5 шаг. Проведем composer require <username>/<название расширения>:dev-master
в основом проекте. Теперь подключим компонент в @app/config/web.php
:
'components' => [
'profile' => [
'class' => '<username>\profile\ProfileComponent',
],
...
],
И компонент доступен через \Yii::$app->profile
6 шаг. Когда разработка расширения завершена, необходимо отправить данное расширение на гитхаб, для этого консолью заходим в папку @app/runtime/tmp-extensions/<название расширения>
и выполняем команды:
git init
git commit -m 'init'
git remote add origin https://github.com/<username>/<название репозитория>.git
git push -u origin master
7 шаг. Заходим в packagist.org
и нажимаем Submit
, вставляем ссылку до гитхаб-репозитория: https://github.com/<username>/<название репозитория>
.
Теперь подправим секцию из шага 3:
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
После этого написанное расширение доступно для установки через композер.
{{ 'Comments (%count%)' | trans {count:count} }}
{{ 'Comments are closed.' | trans }}