PHPackages                             vitalik74/event-app - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. vitalik74/event-app

ActiveProject[Framework](/categories/framework)

vitalik74/event-app
===================

Yii 2 Basic Event App

06PHP

Since Apr 29Pushed 10y ago1 watchersCompare

[ Source](https://github.com/vitalik74/event-app)[ Packagist](https://packagist.org/packages/vitalik74/event-app)[ RSS](/packages/vitalik74-event-app/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Yii 2 event-test-app
====================

[](#yii-2-event-test-app)

Времени затратил около 28 часов. Буду рад услышать замечания, ошибки. Писать на [tsibikov\_vit@mail.ru](mailto:tsibikov_vit@mail.ru). Тестировал на php 5.5, mysql 5.6.

Установка
=========

[](#установка)

1. `php composer.phar create-project --prefer-dist --stability=dev vitalik74/event-app basic`
2. Прописать БД в конфиге
3. Выполнить `yii migrate --migrationPath=@yii/rbac/migrations`
4. Выполнить `yii migrate`
5. Выполнить `yii rbac/init`
6. admin 123456 логин/пароль в админку под админом.

Структура
=========

[](#структура)

Основной класс, который отвечает за все события это `app/components/events/Event`. Подключается как компонент к Yii. Имеет ряд настроек. Если какие-то обязательные парамтры конфига отсутствует, то выдаст эксепшен `InvalidConfigException` не верной настройки конфига. Пример конфига:

```
'event' => [
    'class' => 'app\components\events\Event', // сам класс
    'modelsNamespace' => [ // какие модели мы подключаем к системе ивентов
        'app\models',
        //'app\controllers'
    ],
    'eventsNamespace' => 'app\events', // неймспейс классов отправки самих уведомлений
    'findModelsRecursive' => false, // искать ли в подпапках классы
    'startCustomEventName' => 'EVENT_CUSTOM', // начальное название констант, которые означают какое-то событие
    'executeModels' => [ // не учитываем эти модели, поддерживается формат 'model' => ['constant', 'constant'].
        'app\models\Article' => [
            'EVENT_CUSTOM_SEND_USERS_OFF', 'EVENT_CUSTOM_SEND_USERS_OFF2'
        ],
        'app\models\Event', 'app\models\BrowserEvent',
    ],
    'modelEventClass' => 'app\models\Event',// модель текста событий из БД. Должна реализовывать интерфейс EventModelInterface
]

```

Классы отправки самих уведомлений (Email, Browser и др.) находятся `app/events`. Вынес отдельно для меньшей связанности. Наследуются от `BaseSender` и реализуют интерфейс `SenderInterface`.

Модель AR `Event` должна реализовывать интерфейс `EventModelInterface`.

Возможности
===========

[](#возможности)

Существует 4 способа подключения событий (перед этим надо объявить константы события с первоначальным названием как указано в конфиге (по умолчанию: EVENT\_CUSTOM)):

```
/**
 * @return \app\components\events\Event
 */
protected function getEvent()
{
    /** @var \app\components\events\Event $event */
    return Yii::$app->event;
}

/**
 * @inheritdoc
 */
public function init()
{
    $event = $this->getEvent();

    $event->bind($this);// bind default events
    $event->bind($this, static::EVENT_CUSTOM_SEND_USERS_WITH_PARAM, ['where' => ['user_id' => 1]]);
    $event->bind($this, static::EVENT_CUSTOM_SEND_USERS_WITH_MODELS, ['models' => ['user']]);
    $event->bind($this, static::EVENT_CUSTOM_SEND_USERS_CLOSURE, function () {
        return [
            'test' => 'Test variable',
        ];
    });

    parent::init();
}

```

1. Самый простой способ подключение на дефолтные события (которые объявленый в `Model`, `Component`, `ActiveRecord`) при этом в отправщик будет передана сама модель, а переменные в тексте заменены на значения.

```
$event->bind($this);// bind default events

```

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

```
$event->bind($this, static::EVENT_CUSTOM_SEND_USERS_WITH_PARAM, ['where' => ['user_id' => 1]]);

```

По сути это заменяет такой код:

```
public function afterSave($insert, $changedAttributes)
{
    parent::afterSave($insert, $changedAttributes);

    if ($this->type == 1) {
        $this->trigger(...);
    }

}

```

3. Когда нужно чтобы в отправляемом сообщении указывались данные из нескольких связанных моделей. Допустим: вышла новая статья и надо указать автора. При выборе такого события в менеджере событий будут автоматом подгружены содели и указаны все возможные атрибуты.

```
$event->bind($this, static::EVENT_CUSTOM_SEND_USERS_WITH_MODELS, ['models' => ['user']]);

```

4. И последний вариант, когда необходима свобода действий, то используем анонимную функцию. Анонимная функция должна возвращать массив с переменными. Которые экстраполируются в сообщение.

```
$event->bind($this, static::EVENT_CUSTOM_SEND_USERS_CLOSURE, function () {
        return [
            'test' => 'Test variable',
        ];
    });

```

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/d504d513e57ee61e039fe25d257bf0e99a720e9a362908d9e58952fff0e97d6e?d=identicon)[vitalik74](/maintainers/vitalik74)

---

Top Contributors

[![vitalik74](https://avatars.githubusercontent.com/u/6257637?v=4)](https://github.com/vitalik74 "vitalik74 (24 commits)")

### Embed Badge

![Health badge](/badges/vitalik74-event-app/health.svg)

```
[![Health](https://phpackages.com/badges/vitalik74-event-app/health.svg)](https://phpackages.com/packages/vitalik74-event-app)
```

###  Alternatives

[laravel/telescope

An elegant debug assistant for the Laravel framework.

5.2k67.8M192](/packages/laravel-telescope)[spiral/roadrunner

RoadRunner: High-performance PHP application server and process manager written in Go and powered with plugins

8.4k12.2M84](/packages/spiral-roadrunner)[nolimits4web/swiper

Most modern mobile touch slider and framework with hardware accelerated transitions

41.8k177.2k1](/packages/nolimits4web-swiper)[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k36.7M259](/packages/laravel-dusk)[laravel/prompts

Add beautiful and user-friendly forms to your command-line applications.

708181.8M596](/packages/laravel-prompts)[cakephp/chronos

A simple API extension for DateTime.

1.4k47.7M121](/packages/cakephp-chronos)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
