Laravel中的通知,存储在Session中(如何创建和清除通知)

时间:2018-11-24 03:31:05

标签: laravel

我正在制作一个应用程序,并将其添加到视图模板中,以显示所有通知/状态消息/警报:

@if ( ! empty( session('notifications') ) )
  @foreach( session('notifications') as $notification )
    <div class="alert alert-{{ $notification['notification_type'] }}" role="alert">
      <strong>{{ $notification['notification_title'] }}</strong> - {{ $notification['notification_message'] }}
    </div>
  @endforeach
@endif

我正在寻找一种方法,可以将通知简单地传递到存储在session('notifications')中的控制器中任何地方的Collection中。

但是,每当加载页面时,该会话变量就开始为空。因此,我需要两者:

  • 在每次加载页面时清除所有通知(我假设使用Session::forget('notifications')ref)。
  • 在会话中实例化一个空Collection,因此我不需要检查是否为空,然后添加通知,如果它为空,然后进行制作,一个空的收集并添加通知。

这样的代码在哪里?我对来自Laravel的Laravel并不陌生,我只是会在functions.php中向init添加一个动作。但是Laravel中的等效项在哪里?

这是在Laravel中控制通知的正确方法吗?我称它为通知,缺少更好的用词。也许是“警报”还是“状态”?因为我可以看到notification是相关的东西,但是还有其他东西。

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是https://laravel.com/docs/5.7/session#flash-data

对吗?

答案 1 :(得分:0)

对于其他可能需要它的人,这是一个用于添加多个Flash消息的功能。

helper.php

将其放置在全局可访问的位置(this post描述了建立此类位置的方法):

function add_flash_message( array $notification){
  session()->flash( 'any_notifications', true );
  if(
    empty( session( 'notification_collection' ) )
  ){
    // If notification_collection is either not set or not a collection
    $new_collection = new \Illuminate\Support\Collection();
    $new_collection->push([
      'notification_title' => $notification['title'],
      'notification_message' => $notification['message'],
      'notification_type' => $notification['type'],
    ]);
    session()->flash( 'notification_collection', $new_collection );
  } else {
    // Add to the notification-collection
    $notification_collection = \Session::get( 'notification_collection' );
    $notification_collection->push( [
      'notification_title' => $notification['title'],
      'notification_message' => $notification['message'],
      'notification_type' => $notification['type'],
    ]);
    session()->flash( 'notification_collection', $notification_collection );
  }
}

这是什么,它检查是否已经有闪光消息。如果有的话,它将添加新的;如果没有,它将创建一个新集合并添加到该集合中。

在工作流程中

add_flash_message( [
  'title' => 'The file does not exist',
  'message' => 'The chosen file/path does not seem to exist.',
  'type' => 'danger'
] );

在视图/刀片文件中

@if( !empty( Session( 'any_notifications' ) ) )
  @foreach (Session('notification_collection') as $notification)
    <div class="alert alert-{{ $notification['notification_type'] }}" role="alert">
      <strong>{{ $notification['notification_title'] }}</strong> - {{ $notification['notification_message'] }}
      <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
    </div>
  @endforeach
@endif