Tartar
Tartar

Reputation: 5452

Laravel 5.2 Displaying Validation Error

I am trying to validate a simple form by using Laravel's validator. Looks like validation works fine but i am unable to display errors. Form and controller looks like this.

Form

<h3>Add a New Team</h3>

<form method="POST" action="/teams">

    <input type="hidden" name="_token" value="{{ csrf_token() }}">

    <div class="form-group">
        <input class="form-control" name="team_name" value="{{ old('team_name') }}" />
    </div>

    <div class="form-group">
        <button type="submit" class="btn bg-primary">Add Team</button>
    </div>    
</form>

@if(count($errors))
    <div class="alert alert-danger">
        <ul>
            @foreach($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Controller Method

public function store(Request $request) {

    $this->validate($request, [

        'team_name' => 'required|min:10'

    ]);

    $team = new Team;
    $team->team_name = $request->team_name;
    $team->save();

    return back();
}

If i remove web middleware group from my routes, errors displays fine.

Currently my routes.php file looks like this

Route::group(['middleware' => ['web']], function () {

    Route::get('/teams', 'TeamsController@create');
    Route::post('/teams', 'TeamsController@store');

});

How do i fix this problem ? Any help would be appreciated.

Upvotes: 0

Views: 380

Answers (5)

TheGeeky
TheGeeky

Reputation: 971

why do use the validation looks like laravel 4 while you are using laravel 5!!

in laravel 5 you need first to make Request class that handle your validation

php artisan make:request RequestName

you will find the request class that you make in

'app/http/Requests/RequestName.php'

and in the rules function you can handle your validation

public function rules()
    {
        return [
            // put  your validation rules here
            'team_name' => 'required|min:10'
        ];
    }

finally in your controller

use App\Http\Requests\RequestName;

public function store(RequestName $request) {
    Team::create($request->all());
    return Redirect::back();
} 

for more illustration here

Upvotes: 2

Rifki
Rifki

Reputation: 3530

If i remove web middleware group from my routes, errors displays fine.

In Laravel 5.2 the web midddleware is automatically applied to your routes in routes.php so no need to apply web middleware again. It is defined in mapWebRoutes() method of RouteServiceProvider.

Upvotes: 0

Tartar
Tartar

Reputation: 5452

After a little bit research, i have found that Laravel 5.2 has a RouteServiceProvider and it includes web middleware group for all routes. So i do not have to add the web middleware group to my routes manually. I just removed it from routes.php and problem solved.

Upvotes: 0

huuuk
huuuk

Reputation: 4795

I recommend you to use Laravel Form Request run

artisan make:request TeamRequest

add some logic and rules

class TeamRequest extends Request {

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true; //you can put here any other variable or condition
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            // put  your validation rules here
        ];
    }

}

then your contorller code will be like so:

public function store(TeamRequest $request)
{

    $team = Team::create($request->all());

    return back();
}

you no longer need to validate request and redirect back with errors and other stuff, laravel will do it for you
And you code looks more clean and neat, isn't it?

Upvotes: 1

Yasin Patel
Yasin Patel

Reputation: 5731

Write below code in your controller :

// define rules
  $rules = array(
    'team_name' => 'required|min:10'
   );

$validator = Validator::make(Input::all(), $rules);

if ($validator->fails())
{
  // something
   return Redirect::back()
          ->withErrors($validator) // send back all errors to the login form
          ->withInput();
}
else
{
  // something
   // save your data 
   $team = new Team;
   $team->team_name = $request->team_name;
   $team->save();
}

change in View File :

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Upvotes: 0

Related Questions