我正在创建书籍的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
这实际上有效但我希望在有人没有完成字段时显示一些现成的错误。我怎么能这样做?
答案 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">×</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());
}