Home

Awesome

Notifications

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.

Installation

  1. Install Yii2 using your preferred method
  2. Install package via composer
  1. Update config file config/web.php as shown below. Check out the Module for more available options.

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

Module parameters

By specifying the users model class name in the userClass property proper table name and primary key column name will be used in migrations.

Display notifications

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'))));

Receiving messages

By configuring the WebNotifications widget messages could be read by:

Changelog

0.95 - 2014-01-15

Initial release after porting from Yii 1.