This is a module for Yii 2.0 framework that provides:
Messages could be passed directly as strings or created from some objects, like Active Records. This could be used to log all changes to the models, exactly like the audittrail2 extension.
When recipients are subscribed to a channel, message delivery can depend on category filtering, much like in logging system provided by the framework.
A simple SQL queue implementation is provided if a MQ server is not available or not necessary.
php composer.phar require nineinchnick/yii2-nfy "dev-master"
OR add to composer.json require section "nineinchnick/yii2-nfy": "dev-master"
Enable module in configuration. Do it in both main and console configs, because some settings are used in migrations.
Copy migrations to your migrations folder and adjust dates in file and class names. Then apply migrations.
Define some queues as application components and optionally enable the module, see the next section.
$config = [
// .........
'aliases' => [
'@nineinchnick/nfy' => '@vendor/nineinchnick/yii2-nfy',
],
'modules' => [
'nfy' => [
'class' => 'nineinchnick\nfy\Module',
],
],
'components' => [
'dbmq' => [
'class' => 'nineinchnick\nfy\components\DbQueue',
'id' => 'queue',
'label' => 'Notifications',
'timeout' => 30,
],
'sysvmq' => [
'class' => 'nineinchnick\nfy\components\SysVQueue',
'id' => 'a',
'label' => 'IPC queue',
],
'redismq' => [
'class' => 'nineinchnick\nfy\components\RedisQueue',
'id' => 'mq',
'label' => 'Redis queue',
'redis' => 'redis',
],
// ..........
],
]
Then you can send and receive messages through this component:
// send one message 'test'
Yii::$app->dbmq->send('test');
// receive all available messages without using subscriptions and immediately delete them from the queue
$messages = $queue->receive();
Or you could subscribe some users to it:
Yii::$app->queue->subscribe(Yii:$app->user->getId());
// send one message 'test'
Yii::$app->queue->send('test');
// receive all available messages for current user and immediately delete them from the queue
$messages = $queue->receive(Yii:$app->user->getId());
// if there are any other users subscribed, they will receive the message independently
By specifying the users model class name in the userClass property proper table name and primary key column name will be used in migrations.
Put anywhere in your layout or views or controller.
$this->widget('nfy.extensions.webNotifications.WebNotifications', array('url'=>$this->createUrl('/nfy/default/poll', array('id'=>'queueComponentId'))));
By configuring the WebNotifications widget messages could be read by:
Initial release after porting from Yii 1.
Comments