1. Go to this page and download the library: Download tobento/app-notifier library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
tobento / app-notifier example snippets
use Tobento\App\AppFactory;
use Tobento\Service\Notifier\NotifierInterface;
use Tobento\Service\Notifier\ChannelsInterface;
use Tobento\Service\Notifier\QueueHandlerInterface;
use Tobento\App\Notifier\AvailableChannelsInterface;
use Tobento\App\Notifier\NotificationsInterface;
use Tobento\App\Notifier\Storage\NotificationFormattersInterface;
// Create the app
$app = (new AppFactory())->createApp();
// Add directories:
$app->dirs()
->dir(realpath(__DIR__.'/../'), 'root')
->dir(realpath(__DIR__.'/../app/'), 'app')
->dir($app->dir('app').'config', 'config', group: 'config')
->dir($app->dir('root').'public', 'public')
->dir($app->dir('root').'vendor', 'vendor');
// Adding boots
$app->boot(\Tobento\App\Notifier\Boot\Notifier::class);
$app->booting();
// Implemented interfaces:
$notifier = $app->get(NotifierInterface::class);
$channels = $app->get(ChannelsInterface::class);
$queueHandler = $app->get(QueueHandlerInterface::class);
$availableChannels = $app->get(AvailableChannelsInterface::class);
$notificationFormatters = $app->get(NotificationFormattersInterface::class);
$notifications = $app->get(NotificationsInterface::class);
// Run the app
$app->run();
use Tobento\Service\Notifier\NotifierInterface;
use Tobento\Service\Notifier\Notification;
use Tobento\Service\Notifier\Recipient;
class SomeService
{
public function send(NotifierInterface $notifier): void
{
// Create a Notification that has to be sent:
// using the "email" and "sms" channel
$notification = new Notification(
subject: 'New Invoice',
content: 'You got a new invoice for 15 EUR.',
channels: ['mail', 'sms'],
);
// The receiver of the notification:
$recipient = new Recipient(
email: '[email protected]',
phone: '15556666666',
);
// Send the notification to the recipient:
$notifier->send($notification, $recipient);
}
}
use Tobento\Service\Notifier\NotifierInterface;
use Tobento\Service\Notifier\Notification;
use Tobento\Service\Notifier\Recipient;
use Tobento\Service\Notifier\Parameter\Queue;
class SomeService
{
public function send(NotifierInterface $notifier): void
{
// Create a Notification that has to be sent:
// using the "email" and "sms" channel
$notification = (new Notification(
subject: 'New Invoice',
content: 'You got a new invoice for 15 EUR.',
channels: ['mail', 'sms'],
))->parameter(new Queue(
// you may specify the queue to be used:
name: 'secondary',
// you may specify a delay in seconds:
delay: 30,
// you may specify how many times to retry:
retry: 3,
// you may specify a priority:
priority: 100,
// you may specify if you want to encrypt the message:
encrypt: true,
));
// The receiver of the notification:
$recipient = new Recipient(
email: '[email protected]',
phone: '15556666666',
);
// Send the notification to the recipient:
$notifier->send($notification, $recipient);
}
}
use Tobento\App\Notifier\AvailableChannelsInterface;
$channels = $app->get(AvailableChannelsInterface::class);
var_dump($channels->has(channel: 'sms'));
// bool(true)
var_dump($channels->titleFor(channel: 'sms'));
// string(3) "Sms"
var_dump($channels->names());
// array(3) {[0]=> string(4) "mail" [1]=> string(3) "sms" [2]=> string(7) "storage"}
var_dump($channels->titles());
// array(3) {[0]=> string(4) "Mail" [1]=> string(3) "Sms" [2]=> string(7) "Storage"}
var_dump($channels->titlesToString(separator: ', '));
// string(18) "Mail, Sms, Storage"
// Add a new title for a channel returning a new instance:
$channels = $channels->withTitle(channel: 'sms', title: 'SMS Channel');
var_dump($channels->titleFor(channel: 'sms'));
// string(11) "SMS Channel"
// Returns a new instance with the channels mapped.
$channels = $channels->map(fn($title, $name) => strtoupper($title));
var_dump($channels->titlesToString(separator: ', '));
// string(26) "MAIL, SMS CHANNEL, STORAGE"
// Returns a new instance with the channels sorted by its name:
$channels = $channels->sortByName();
// Returns a new instance with the channels sorted by its title:
$channels = $channels->sortByTitle();
// Count channels:
var_dump($channels->count());
// int(3)
// Returns a new instance with with only the channels specified:
$channels = $channels->only(['sms', 'mail']);
// Returns a new instance with the channels except those specified:
$channels = $channels->except(['sms', 'mail']);
// Iteration:
foreach($channels->all() as $name => $title) {}
// or just:
foreach($channels as $name => $title) {}
use Tobento\Service\Notifier\Notification;
use Tobento\Service\Notifier\Message;
$notification = (new Notification())
->addMessage('storage', new Message\Storage([
'message' => 'You received a new order.',
'action_text' => 'View Order',
'action_route' => 'orders.view',
'action_route_parameters' => ['id' => 555],
]));
use Tobento\App\Notifier\Storage\NotificationFormatterInterface;
use Tobento\App\Notifier\Storage\Notification;
use Tobento\Service\Translation\TranslatorInterface;
use Tobento\Service\Routing\RouterInterface;
class NewOrderNotificationFormatter implements NotificationFormatterInterface
{
public function __construct(
protected TranslatorInterface $translator,
protected RouterInterface $router,
) {}
public function format(Notification $notification): Notification
{
// You may only format specific notifications
if (!$notification->name() instanceof NewOrderNotification) {
return $notification;
}
// Stop further formatters to format notification:
$notification->stopPropagation(true);
// Retrieve specific message data:
$orderId = $notification->get('data.order_id');
// Format:
return $notification
->withMessage($this->translator->trans('New order received'))
->withAddedAction(
text: $this->translator->trans('View Order'),
url: $this->router->url('orders.view', ['id' => $orderId]),
);
}
}
use Tobento\Service\Notifier\Parameter\Queue;
use Tobento\Service\Notifier\NotificationInterface;
'notifications' => [
// using a custom notification:
UserRegisterNotification::class => CustomUserRegisterNotification::class,
// using a notification factory:
UserRegisterNotification::class => UserRegisterNotificationFactory::class,
// using a closure:
UserRegisterNotification::class => function (UserRegisterNotification $notification): NotificationInterface {
return $notification->parameter(new Queue());
},
// if named notification:
'register' => CustomUserRegisterNotification::class,
],
use Tobento\Service\Notifier\AbstractNotification;
use Tobento\Service\Notifier\RecipientInterface;
use Tobento\Service\Notifier\Message;
class CustomUserRegisterNotification extends AbstractNotification implements Message\ToSms
{
public function __construct(
protected UserRegisterNotification $notification,
// ...
) {}
public function toSms(RecipientInterface $recipient, string $channel, SomeService $service): Message\SmsInterface
{
return new Message\Sms(
subject: 'Thanks for your registration',
);
}
}
use Tobento\App\Notifier\NotificationFactoryInterface;
use Tobento\Service\Notifier\NotificationInterface;
class UserRegisterNotificationFactory implements NotificationFactoryInterface
{
public function createNotification(NotificationInterface $notification): NotificationInterface
{
// create custom notification:
// or modify original:
return $notification;
}
}
app/config/notifier.php
app/config/notifier.php
app/config/notifier.php
app/config/notifier.php
app/config/notifier.php
app/config/notifier.php
php ap notifications:clear
php ap notifications:clear --channel=foo --channel=bar
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.