Reputation: 198
I am new in Laravel and using laravel version 5.2.
I created a controller and request named as ArticlesController and CreateArticleRequest respectively and i defined some validation rules.
CreateArticleRequest
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class CreateArticleRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'title' => 'required|min:3',
'body' => 'required|max:400',
'published_at' => 'required|date',
];
}
}
ArticlesController
<?php
namespace App\Http\Controllers;
use App\Article;
//use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use App\Http\Requests\CreateArticleRequest;
class ArticlesController extends Controller
{
public function add(){
return view('articles.add');
}
public function create_article_row(CreateArticleRequest $request){
Article::create($request->all());
return redirect('articles/');
}
}
When i use $errors variable in my template named as add.blade.php it show error undefined variable: $errors I tried to solve the problem but i did't .Please tell me where i am wrong . add.blad.php
{{ var_dump($errors) }}
Upvotes: 12
Views: 24673
Reputation: 2128
This happens because the file below is not updated in the composer update process, so doesn't have the mapWebRoutes
method implemented.
app/Providers/RouteServiceProvider.php
Copy this file over from a fresh install and it will work. Better, follow the upgrade path on the docs.
Upvotes: 2
Reputation: 111
For 5.2, simply move the the routes that have the errors variable to middleware group
Upvotes: 0
Reputation: 1743
Posting this as it might be useful for others,
As Praveen mentioned in 1st solution, in your Kernel.php
file(app/Http/Kernel.php
) move \Illuminate\View\Middleware\ShareErrorsFromSession::class
from $middlewareGroups
to protected $middleware
property, but the same will start throwing the error "Session store not set on request",
to resolve this move
\Illuminate\Session\Middleware\StartSession::class,
to $middleware property
as well.
Upvotes: 5
Reputation: 19
Just cut all your routes from routes.php file and paste it between the middleware group 'web', just like this:
Upvotes: 1
Reputation: 5609
This is a breaking problem with the 5.2 upgrade. What's happening is the middleware which is responsible for making that errors
variable available to all your views is not being utilized because it was moved from the global middleware to the web
middleware group.
There are two ways to fix this:
In your kernel.php
file(app/Http/Kernel.php), you can move the middleware \Illuminate\View\Middleware\ShareErrorsFromSession::class
back to the protected $middleware
property.
Wrap all your web
routes with a route group and apply the web middleware to them:
Route::group(['middleware' => 'web'], function() {
// Place all your web routes here...(Cut all `Route` which are define in `Route file`, paste here)
});
Copied from this post Laravel 5.2 $errors not appearing in Blade
Upvotes: 31
Reputation: 335
With this code, you can catch errors and display them :
@if ($errors->any())
<div class='alert alert-danger'>
@foreach ( $errors->all() as $error )
<p>{{ $error }}</p>
@endforeach
</div>
@endif
Upvotes: -1