I used your exact same code except returned a view (I also tried without a view) and I got an output with the 'web' middleware.
Route::group(['middleware' => 'web'], function () {
Route::get('showerrors', function(){
return view('showerrors');
});
Route::get('makeerrors', function(){
$validator = Validator::make(['title' => '', 'body' => '' ], [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
return redirect('showerrors')
->withErrors($validator);
} );
});
Showerrors view:
@foreach($errors->all() as $errors)
<li>{{ $error }}</li>
@endforeach
Have you by any chance modified any of your Middleware?
EDIT: I did a test as I had a feeling and I believe i may have found the answer to your issue. I found that having two 'web' middleware groups stopped the errors from showing.
Example:
Route::group(['middleware' => 'web'], function() {
Route::group(['middleware' => 'web'], function() {
// Doesn't work/
});
});
If you have a layout like that, remove one of the web routes.