Оповещения Bootstrap в Laravel

Apr 11, 03:56 am Категория:

Если долго смотреть в админку сайта, то можно превратиться в блогера. Потекут из-под пальцев тексты глубокого смысла, слетятся на них почитатели таланта писательского и жизнь станет совсем исключительной. Правда админку сначала нужно написать. А состоит она, как оказалось, из кучи второстепенных фишек, натыканных вокруг формы публикации. Лично я решил начать собирать эти фишки с алертов: сообщений, предупреждений и прочего интерактива. В используемом мной Bootstrap есть готовые их версии на чистом CSS и проскриптованные. Совершил действие – получил реакцию. И главное – просто и без всякий выпрыгивающих модальных окон. Хотя и с ними тоже можно.

Алерты и прочие оповещения совсем не рокет сайенс, но без них теряется связь с приложением и приходится только догадываться, что там произошло, записался ли файл, нет ли проблем с загрузкой фото и т.п. Вроде работает, но как-то некомфортно. Поэтому все фреймворки по фронтенду предлагают соответствующие сниппеты. И для получения полноценных оповещений остаётся лишь формировать информативные сообщения в контроллере и отображать их в представлении. А чтобы не париться по поводу программирования этой функциональности в каждом новом проекте, нужно подключать готовые пакеты и добавлять несколько строк в blade-шаблоны. А так же взять за правило формировать сами сообщения по факту производства активностей.

С пакетами всё просто: можно написать свой или использовать чужой. Готовых пакетов для алертов много. Мне за последнее время попалась пара: vinkla/alert и laracasts/flash. Я начну свои эксперименты со второго пакета. Если не пойдёт или что-то не понравится, попробую первый. Если и с первым ничего не выйдет, то напишу свой. А скорее всего, я всё перепробую и напишу свой, но начну таки с laracasts/flash. И начало это, как принято в Laravel, состоит из команды

composer require laracasts/flash

которая пакет установит. После установки, по традиции, редактирую файл config/app.php и делаю две вставки

'providers' => [
     ...
    Laracasts\Flash\FlashServiceProvider::class,
];
'aliases' => [
    ...
    'Flash' => Laracasts\Flash\Flash::class,
];

Практически всё. Теперь в шаблонах blade необходимо в нужном месте вставить одну строчку.

@include('flash::message')

Всё, можно применять. Для этого можно использовать фасад, алиас которого я прописал в файле конфигурации, либо функцию-хэлпер:

     // Хотим сообщить об ошибке с помощью фасада
     Flash::error('Что-то пошло не так!');
    // Используем хэлпер для сообщение об успехе
     flash()->success('Всё отлично получилось.');

Доступно 5 видов сообщений:

  • Flash::info(‘Сообщение для вывода информации’)
  • Flash::success(‘Сообщение об успешном производстве действия’)
  • Flash::error(‘Сообщение об ошибке’)
  • Flash::warning(‘Предупреждение’)
  • Flash::overlay(‘Сообщение для вывода в модальном окне’, ‘Заголовок окна’)

Текст сообщения и его тип в виде значений ключей flash_notification.message и flash_notification.level сохранятся в сессии и будут извлечены при создании страницы. Если вставка в шаблоне для этого пакета есть, то всё должно произойти само собой. Ручная обработка сообщений, что может потребоваться при использовании не Bootstrap, а чего-нибудь другого, производится довольно просто:

@if (Session::has('flash_notification.message'))
    
{{ Session::get('flash_notification.message') }}
@endif

Что на русский можно перевести как “Если есть сообщение в сессии, то будем его транслировать в соответствии с заданным уровнем тревожности”. Скобочки и буковки в этом коде расставить по вкусу в соответствии с используемыми инструментами. И лучше сохранить код в виде всё того же blade шаблона и вставлять его куда надо.

Если для алертов используются модальные окна, то нужно после подключения библиотек jQuery.js и Bootstrap.js добавить такой скрипт:


Вот кажется и всё.

Теги этой статьи: ,

 

Комментарии

2017-10-18 10:17 pm , Оставь комментарий