【问题标题】:Laravel 5.1 flash message handlingLaravel 5.1 flash 消息处理
【发布时间】:2015-11-18 07:02:03
【问题描述】:

在 Laravel 5.0 和 4.* 中有这个选项来检查 Session 是否有 flash_messages:

控制器:

public function store(Request $request) {
    Session::flash('flash_message', 'Success');
    return redirect('somepage');
}

然后你可以在你的布局中调用它:

@if (Session::has('flash_message'))
    <p>{{ Session::get('flash_message') }}</p>
@endif

这工作得很好,但是在 Laravel 5.1 中它发生了变化。现在它存储在请求变量中。因此,我在控制器中将其更改为:

public function store(Request $request) {
    $request->session()->flash('flash_message', 'Success');
    return redirect('somepage');
}

我在布局中称之为:

@if($request->session()->has('flash_message'))
    <p>{{ $request->session()->get('flash_message') }}</p>
@endif

我正在按照 Laravel 5.1 文档中的说明进行操作:

确定会话中是否存在项目

has 方法可用于检查会话中是否存在项目。 如果项目存在,此方法将返回 true:

if ($request-&gt;session()-&gt;has('users')) { // }

现在这对于 store 方法非常有效,因为我只在那里添加了一个 flash_message,但如果我想访问另一个方法,如索引、创建、编辑等,它会显示此错误:

错误异常

未定义变量:请求

我了解请求变量未在其他方法中声明,我可以使用 isset($request) 解决此 if 语句。

是否有更好的解决方案来检查我的 flash_message 是否设置在 $request 变量中,就像在早期版本的 Laravel 中一样?

【问题讨论】:

  • 你仍然可以在 Blade 视图中使用 Session 外观,就像在 Laravel 4 中一样。文档中使用的示例是使用 Request 来显示方法参数注入。

标签: php session laravel laravel-5.1 flash-message


【解决方案1】:

听起来你正在使用 Laravel 生成的控制器。

如果您查看storeupdate 的方法定义,您会发现参数Request $request。通过包含这个 Laravel 会自动为你创建一个 Request 实例。

为了在其他方法中访问它,您有三个选项:

将相同的参数添加到任何其他方法定义中,Laravel 将以相同的方式为您生成它。

创建一个构造函数并将Request 实例分配给一个属性。

public function __construct(Request $request)
{
     $this->request = $request;
}

在类定义之前声明 use Session; 以使 Session 类可在您的命名空间中访问。

【讨论】:

    【解决方案2】:

    您仍然可以使用旧方法 :) 。最新的 laravel 刚刚添加了实现该目标的新方法。这里是显示错误消息的示例代码,这些错误消息作为 flash 消息传递到视图页面。

    示例代码

    @if ($message = Session::get('success'))
     <div class="alert alert-success alert-block">
      <button type="button" class="close" data-dismiss="alert">&times;</button>
      <h4>Success</h4>
      @if(is_array($message))
       @foreach ($message as $m)
        {{ $m }}
       @endforeach
      @else
       {{ $message }}
      @endif
     </div>
    @endif
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 2022-10-26
      • 1970-01-01
      • 2019-08-22
      相关资源
      最近更新 更多