Skip to content
Anton edited this page May 12, 2015 · 13 revisions

Описание

Компонент для организации так называемых flash-сообщений - т.е. уведомлений от системы пользователю. Данные сообщения завязаны на Translator, так что нет необходимости лишний раз его дёргать.

Технология Adobe Flash тут ни при чём

Настройки

Нет

Использование

с версии 0.6.0 изменился способ вызова - теперь только через Proxy
с версии 1.0.0 добавлены опциональные параметры для подстановки в sprintf()

Данные сообщения одинаково работают как с обычными HTTP запросами, так и с AJAX запросами:

Messages::addNotice("Notice text");
Messages::addWarning("Warning text");
Messages::addError("Error text");

// @since 1.0.0
Messages::addNotice("Hello %s", 'World');   // > "Hello World"
Messages::addWarning("%d %d %d", 1, 2, 3);  // > "1 2 3"
Messages::addError("%1$d+%1$d=%2$d", 1, 2); // > "1+1=2"

Внутри методов пакета идёт автоматический вызов переводчика Translate, так что нет необходимости оборачивать текст сообщения в обёртку __(..)

Если после отработки кода скрипта необходимо сделать перенаправление на другую страницу, то дополнительных манипуляций не требуется, достаточно будет использовать средства самого фреймворка:

// from controller
Messages::addNotice('Thank you');
$this->redirect($url);

Для вывода сообщений в шаблоне:

use \Bluz\Proxy\Messages;

if (Messages::count()) {
    $messages = Messages::popAll();
    // as HTML
    foreach ($messages as $type => $set) {
        echo "<h3>$type</h3>"
        foreach ($set as $message) {
            echo "<p>$message</p>";
        }
    }
}

Для вывода сообщений с использованием bluz.notify.js встроенного в skeleton:

<?php use \Bluz\Proxy\Messages; ?>
<?php if (Messages::count()) {
    // JS not allow read headers of current request, only for XMLHTTPRequests :(
    ?>
    <script>
        require(['bluz.notify'], function(notify) {
            notify.set(<?=json_encode(Messages::popAll())?>);
        });
    </script>
<?php endif; ?>
Clone this wiki locally