{{Laracast Laravel 5 Fundamentals, 20, Flash Messaging, 4.02.2015, 15.07.2016, https://laracasts.com/series/laravel-5-fundamentals/episodes/20}} %%(hvlraw) %% (0:00) Вот о чём я хочу, чтобы вы подумали. Часто когда пользователь выполняет какое-либо действие в вашем приложении, вы хотите дать ему какое-то уведомление, чтобы сообщить, например: "Эй, ваша учетная запись была успешно деактивирована". Поэтому, возможно, это было бы полезно и для нашего маленького блога здесь. Введём %%(t)Blog Article%%, небольшой текст и опубликуем статью. И заметьте, что, да, нас сюда перенаправили, и если честно, в данном случае совершенно очевидно, что всё прошло успешно. (0:30) Но, как вы можете себе представить, во многих других случаях, вам действительно понадобятся какие-то уведомления. Даже нечто настолько простое, как нажатие на кнопку %%(t)Log Out%%, может выдать вам сообщение, подтверждающее статус: "Вы вышли из системы". Давайте в этом уроке разберёмся как с этим справиться. Я покажу вам два способа, во-первых, мы сделаем это вручную, а затем дальше, я покажу вам небольшой пакет, который вы сможете притянуть, и с его помощью можно до смешного просто всё это сделать. Наш первый шаг - идём на %%ArticlesController%%. (1:00) Теперь, когда пользователь создаёт новую статью, как мы знаем, метод %%store()%% вызывается, когда мы сделали новую статью и сохранили её. И на самом деле, немного не в тему - здесь мы создаём статью и передаём её методу сохранения %%save()%%, но также, если вы предпочитаете, то могли бы использовать метод %%create()%%. Так же, как мы это делали, когда мы передавали массив атрибутов: %% Article::create([]); %% то же самое было бы верно здесь. Так что если вы хотите, вы могли бы сказать: получить статьи аутентифицированного пользователя и создать новую, используя запрос из формы: %% Auth::user()->articles()->create($request->all()); %% (1:30) так что, если мы удалим вот это, то всё будет по-прежнему работать точно таким же образом. Хорошо, но в любом случае, мы создали новую статью, и мы перенаправим пользователя назад к списку статей, но я также хочу отобразить то, что мы называем "сообщением-вспышкой" (flash). Сообщение, которое показывается на экране для следующего запроса, а позднее, если перезагрузить страницу, его больше не будет видно. Вот как мы можем сделать это в Laravel. У нас есть фасад сессии, так что мы могли бы сказать: %% \Session::flash('flash message', 'Your article has been created!'); %% (2:00) Я хочу показать сообщение, мы даём ему какой-нибудь идентификатор, %%(t)flash message%%, а затем тело, как насчет %%(t)Your article has been created%% (т.е. ваша статья была создана). Хорошо, это сработает для конкретной сессии. Однако, когда мы перенаправляем, то мы не увидим это сообщение, нам всё равно нужно отобразить его где-то в нашем представлении. Так давайте сделаем это. Давайте вернёмся к нашей мастер-странице; если это относится к каждому виду, то мастер-страница – хорошее место, куда это стоит поместить. (2:30) И давайте вставим это прямо здесь, в верхней части нашего контейнера, и позднее мы сможем извлечь паршл, но сейчас давайте просто вставим наш код прямо здесь. Давайте скажем, если у сессии есть этот ключ: %% @if (Session::has('flash message')) %% то в этом случае мы хотим отобразить его. Так почему бы нам не использовать: %%(h)
%% Это специфические классы из Twitter Bootstrap, которые просто немного облегчат нам работу. И потом внутри здесь мы выведем сообщение %% {{ Session::get('flash_message') }} %% (3:00) ОК, таким образом, мы уже узнали несколько методов API. Для начала – %%\Session::flash()%%. Думайте о нём, в качестве единовременного флэш-сообщения. Также есть такие вещи, как %%\Session::put()%% – поместить это в сессию. Разница между этим и flash-сообщением в том, что последнее носит временный характер, только для одного запроса. Так что у нас есть эти два, и ещё мы можем увидеть такие методы, как %%Session::has()%%. Есть ли у нас этот ключ в сессии? (3:30) И если он есть, то через %%get()%% получим значение, связанное с этим ключом. Давайте посмотрим, как это выглядит в браузере. Поэтому ещё раз я создам новую статью. Просто напишем %%(t)test%% (в название) и %%(t)test%% (в тело), и, когда мы добавим статью, точно, вы увидите сообщение прямо здесь. Теперь вот что я имел в виду про то, что это одноразовое сообщение. Если мы перезагрузим эту страницу, сообщение только промелькнуло, так что мы его больше не видим, и это значит, что это идеально подходит для таких маленьких сообщений с уведомлениями. (4:00) Вы вероятно обнаружите, что для большинства производственных приложений вам понадобится немного больше гибкости. Например, когда нас перенаправляют назад на эту страницу с flash-сообщением, оно как бы отображается всё время. Может быть, вы хотите отображать сообщение в течение четырех секунд и чтобы затем оно ускользнуло наверх? Вы хотите, чтобы оно исчезло. Но в других ситуациях, для действительно важных сообщений, вы и правда хотите, чтобы они отображались постоянно. И чтобы пользователь должен был нажать на маленькую кнопку 'х', чтобы признать, что "Да", он прочитал сообщение и теперь хочет удалить его. (4:30) Так что, похоже, что на самом деле, нам нужно здесь чуть больше гибкости. Давайте посмотрим, как мы могли бы это сделать. Ну, для начала, если мы вернёмся к нашему представлению, то почему бы нам не добавить маленький %%(t)х%% наверху, и я просто вставлю вот этот код: %%(h) %% Это на самом деле взято с сайта Twitter Bootstrap. Просто код, который можно добавить чтобы поставить кнопочку %%(t)х%%. Итак, позвольте мне показать вам, как это выглядит. %%(t) laravel5.dev/articles/create %% %%(t)test2%%, опубликуем статью. И теперь мы получаем сообщение, и вы увидите, вот он маленький %%(t)х%%. (5:00) Но если я нажму на него, то ничего пока не происходит, потому что Twitter Bootstrap там требуется немного JavaScript. Так почему бы нам не добавить его? Давайте разместим это внизу, прямо перед закрывающим %%(t)