Бывает нужно показать пользователю какое-либо сообщение только один раз.
Чаще всего это служебное сообщение: письмо отправлено, учетная запись активирована и подобные.
Выводиться они должны один раз и если пользователь обновит страницу или повторно на нее перейдет, то сообщения быть не должно.
Рассмотрим варианты 'Элемент добавлен' и 'Изменения сохранены' для постов блога на Laravel.
Сначала, в файл контроллера PostsController (/app/Http/Controllers/Admin/PostsController.php), нужно добавить:
use Illuminate\Support\Facades\Session;
Далее в методах
store и
update добавляем, соответственно:
Session::flash('flash_message', 'Элемент добавлен');
Session::flash('flash_message', 'Изменения сохранены');
В результате получится:
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Session;
use App\Post;
class PostsController extends Controller
{
...
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$this->validate($request, [
'title' =>'required',
'text' => 'required',
]);
$post = Post::add($request->all());
Session::flash('flash_message', 'Элемент добавлен');
return redirect()->route('posts.index');
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
* @throws \Illuminate\Validation\ValidationException
*/
public function update(Request $request, $id)
{
$post = Post::find($id);
$this->validate($request, [
'title' =>'required',
'text' => 'required',
]);
$post->update($request->all());
Session::flash('flash_message', 'Изменения сохранены');
return redirect()->route('posts.index');
}
...
}
Далее нужно подготовить представление для вывода сообщений, например, так (файл /resources/views/messages.blade.php ):
@if (Session::has('flash_message'))
<div class="container">
<div class="row">
<div class="col-md-10">
<div class="alert alert-success">
{{Session::get('flash_message')}}
</div>
</div>
</div>
</div>
@endif
И вывести его у нужном месте шаблона (@include('messages')). Для примера в файле /resources/views/admin/posts/index.blade.php:
@include('errors')
@include('messages')