yii2-netdisk/widgets/Alert.php

74 lines
2.2 KiB
PHP
Raw Normal View History

2017-08-08 18:02:19 +08:00
<?php
2021-05-19 20:01:06 +08:00
2017-08-08 18:02:19 +08:00
namespace app\widgets;
use Yii;
/**
* Alert widget renders a message from session flash. All flash messages are displayed
* in the sequence they were assigned using setFlash. You can set message as following:
*
* ```php
* Yii::$app->session->setFlash('error', 'This is the message');
* Yii::$app->session->setFlash('success', 'This is the message');
* Yii::$app->session->setFlash('info', 'This is the message');
* ```
*
* Multiple messages could be set as follows:
*
* ```php
* Yii::$app->session->setFlash('error', ['Error 1', 'Error 2']);
* ```
*
* @author Kartik Visweswaran <kartikv2@gmail.com>
* @author Alexander Makarov <sam@rmcreative.ru>
*/
2021-05-19 20:01:06 +08:00
class Alert extends \yii\bootstrap4\Widget
2017-08-08 18:02:19 +08:00
{
/**
* @var array the alert types configuration for the flash messages.
* This array is setup as $key => $value, where:
2017-08-10 01:58:58 +08:00
* - key: the name of the session flash variable
* - value: the bootstrap alert type (i.e. danger, success, info, warning)
2017-08-08 18:02:19 +08:00
*/
public $alertTypes = [
'error' => 'alert-danger',
'danger' => 'alert-danger',
'success' => 'alert-success',
'info' => 'alert-info',
'warning' => 'alert-warning'
];
/**
* @var array the options for rendering the close button tag.
2017-08-10 01:58:58 +08:00
* Array will be passed to [[\yii\bootstrap\Alert::closeButton]].
2017-08-08 18:02:19 +08:00
*/
public $closeButton = [];
2017-11-03 06:38:39 +08:00
2017-08-10 01:58:58 +08:00
/**
* {@inheritdoc}
*/
public function run()
2017-08-08 18:02:19 +08:00
{
$session = Yii::$app->session;
2017-08-10 01:58:58 +08:00
$appendClass = isset($this->options['class']) ? ' ' . $this->options['class'] : '';
2017-08-08 18:02:19 +08:00
foreach (array_keys($this->alertTypes) as $type) {
$flash = $session->getFlash($type);
2017-08-08 18:02:19 +08:00
2017-08-10 01:58:58 +08:00
foreach ((array) $flash as $i => $message) {
2021-05-19 20:01:06 +08:00
echo \yii\bootstrap4\Alert::widget([
2017-08-10 01:58:58 +08:00
'body' => $message,
'closeButton' => $this->closeButton,
'options' => array_merge($this->options, [
'id' => $this->getId() . '-' . $type . '-' . $i,
'class' => $this->alertTypes[$type] . $appendClass,
]),
]);
2017-08-08 18:02:19 +08:00
}
2017-08-10 01:58:58 +08:00
$session->removeFlash($type);
2017-08-08 18:02:19 +08:00
}
}
}