MEM
MEM

Reputation: 31317

Validate method not found - Laravel

Laravel Framework 5.4.35

Contacts Controller:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Illuminate\Routing\Redirector;

use Illuminate\Support\Facades\Mail;

use App\Mail\ContactEmail;

class ContactsController extends Controller
{
    public function index() {
        return view('contact.index');
    }

    public function sendContact (Request $request) {

        $request->validate([
            'name' => 'required|min:3',
            'email' => 'required|email',
            'message' => 'required|min:5',
        ]);

        Mail::to('[email protected]')
                ->send(new ContactEmail($request));

        return redirect('/contact/success');
    }

    public function success() {
        return view('contact.success');
    }
}

The Controller that extends:

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

When it goes here:

$request->validate([
                'name' => 'required|min:3',
                'email' => 'required|email',
                'message' => 'required|min:5',
            ]);

I get this output:

(1/1) BadMethodCallException Method validate does not exist

I have the namespace, the classes to be used. The call to the method seems to be ok.

What am I missing?

Care to advise?

If I create a validator instance manually using the Validator facade. It seems to validate.

Upvotes: 0

Views: 3391

Answers (1)

Simon Davies
Simon Davies

Reputation: 3686

You mention your using version 5.4. The method you're using to validats via the request is only from version 5.5.

So you will need to do it like...

$this->validate($request, [
    'name' => 'required|min:3',
            'email' => 'required|email',
            'message' => 'required|min:5',
]);

Hope this helps. Check out the 5.4v docs rather than the, aster/5.5v https://laravel.com/docs/5.4/validation#validation-quickstart

Laravel 5.4

$this->validate($request, [

Laravel 5.5

$request->validate([

Upvotes: 2

Related Questions