您可以创建多个不同类型的消息。
请按照以下步骤操作:
- 创建文件: "
app/Components/FlashMessages.php
"
namespace App\Components;
trait FlashMessages
{
protected static function message($level = 'info', $message = null)
{
if (session()->has('messages')) {
$messages = session()->pull('messages');
}
$messages[] = $message = ['level' => $level, 'message' => $message];
session()->flash('messages', $messages);
return $message;
}
protected static function messages()
{
return self::hasMessages() ? session()->pull('messages') : [];
}
protected static function hasMessages()
{
return session()->has('messages');
}
protected static function success($message)
{
return self::message('success', $message);
}
protected static function info($message)
{
return self::message('info', $message);
}
protected static function warning($message)
{
return self::message('warning', $message);
}
protected static function danger($message)
{
return self::message('danger', $message);
}
}
在你的基础控制器 "app/Http/Controllers/Controller.php
" 中。namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesResources;
use App\Components\FlashMessages;
class Controller extends BaseController
{
use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests;
use FlashMessages;
}
这将使得所有继承此类的控制器都可以使用
FlashMessages
特质。
- 为我们的消息创建一个刀版模板:"
views/partials/messages.blade.php
"
@if (count($messages))
<div class="row">
<div class="col-md-12">
@foreach ($messages as $message)
<div class="alert alert-{{ $message['level'] }}">{!! $message['message'] !!}</div>
@endforeach
</div>
</div>
@endif
关于“app/Providers/AppServiceProvider.php”中的“boot()”方法:namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Components\FlashMessages;
class AppServiceProvider extends ServiceProvider
{
use FlashMessages;
public function boot()
{
view()->composer('partials.messages', function ($view) {
$messages = self::messages();
return $view->with('messages', $messages);
});
}
...
}
这会使得变量
$messages
在被调用时,可以在"
views/partials/message.blade.php
"模板中使用。
- 在你的模板中,包含我们的消息模板 - "
views/partials/messages.blade.php
"。
<div class="row">
<p>Page title goes here</p>
</div>
@include ('partials.messages')
<div class="row">
<div class="col-md-12">
Page content goes here
</div>
</div>
您只需在页面上希望显示消息的位置包含消息模板即可。
在您的控制器中,您可以简单地执行以下操作来推送闪存消息:
use App\Components\FlashMessages;
class ProductsController {
use FlashMessages;
public function store(Request $request)
{
self::message('info', 'Just a plain message.');
self::message('success', 'Item has been added.');
self::message('warning', 'Service is currently under maintenance.');
self::message('danger', 'An unknown error occured.');
self::info('Just a plain message.');
self::success('Item has been added.');
self::warning('Service is currently under maintenance.');
self::danger('An unknown error occured.');
}
...
希望这能帮到你。