Laravel flash消息验证

时间:2015-06-11 10:46:00

标签: laravel

我正在创建书籍的CRUD,我想要做的就像生成的auth文件,如果有人注册并且没有在文本框中输入任何文件,则会返回一条flash消息。我现在正在这样做,但我只能在成功创建一本书时发出一条flash消息。这是我的商店功能

public function store(Request $request)
{
    $this->validate($request, [
        'isbn' => 'required|',
        'title' => 'required',
        'author' => 'required',
        'publisher' => 'required'
    ]);
    Session::flash('msg', 'Book added!');
    $books = $request->all();
    Book::create($books);
    return redirect('books');
}

在我的home.blade.php

@if(Session::has('msg'))
<div class="alert alert-success">
 {{ Session::get('msg') }}
 </div>
 @endif

这实际上有效但我希望在有人没有完成字段时显示一些现成的错误。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

这很简单,首先有一个很好的功能,即redirect()->with()

所以你的控制器代码可能是:

public function store(Request $request)
{
    $this->validate($request, [
        'isbn' => 'required|',
        'title' => 'required',
        'author' => 'required',
        'publisher' => 'required'
    ]);
    if(Book::create($books)){
      $message = [
        'flashType'    => 'success',
        'flashMessage' => 'Book added!'
      ];
    }else{
      $message = [
        'flashType'    => 'danger',
        'flashMessage' => 'Oh snap! something went wrong'
      ];
    }
    return redirect()->action('BooksController@index')->with($message);
}

然后在你看来:

@if (Session::has('flashMessage'))
  <div class="alert {{ Session::has('flashType') ? 'alert-'.session('flashType') : '' }}">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    {{ session('flashMessage') }}
  </div>
@endif

奖励你可以把它放在你的页脚上,这样警报框会在3秒后消失:

<script>
  $('div.alert').delay(3000).slideUp(300);
</script>

答案 1 :(得分:1)

您可以获取字段的个别错误

{!! $errors->first('isbn'); !!}

或者您可以获得所有错误

@foreach ($errors->all() as $error)
     <div>{{ $error }}</div>
@endforeach

答案 2 :(得分:1)

你可以像这样使用try catch

try{
$books = $request->all();
Book::create($books);
Session::flash('msg', 'Book added!');
}
catch(Exception $e){
Session::flash('msg', $e->getmessage());
}