Vojta
Vojta

Reputation: 379

Laravel error is not passed to view

I can't figure put why laravel blade doesn't catch my error validation and doesn't pass it to my view. In detail

What I'm missing?

Thank you

This is json message I see instead of message in blade template

{ message: "The given data was invalid.", status_code: 500 }

This snippet I use to let user know about error

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

And finally this is my correctly working validation

        $request->validate([
        'email' => 'required|email|unique:subscribers|max:255',
    ]);

EDIT:

This is the rout in web.php

Route::post('saveemail', 'SaveSubscriberEmailController@saveEmail');

And this is the method

namespace App\Http\Controllers;


use App\subscriber;

use Carbon\Carbon;

use Illuminate\Http\Request;

use Ramsey\Uuid\Uuid;


class SaveSubscriberEmailController extends Controller
{

    public function saveEmail(Request $request)
    {
        $request->validate([
            'email' => 'required|email|unique:subscribers|max:255',
        ]);



        $uuid = Uuid::uuid4();

        $subscriber = new subscriber();
        $subscriber->email = $request->email;
        $subscriber->uuid = $uuid->toString();
        $subscriber->created_at = Carbon::now();
        $subscriber->save();

        flash('Registration conformation email has been sent. Please check your mailbox. Thank you!')->success();
        return redirect()->back();
    }
}

Upvotes: 0

Views: 1162

Answers (3)

A3mercury
A3mercury

Reputation: 166

I've had this problem before and the way I was able to fix it was to wrap the routes with a middleware group that includes the middleware \Illuminate\View\Middleware\ShareErrorsFromSession::class. It adds the session's errors to the view.

In your Kernel.php class's protected $middlewareGroups array it can look something like:

'web' => [
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    // other middleware
],

Then where you declare your routes you can do:

Route::group(['middleware' => ['web']], function () { 
    Route::post('saveemail', 'SaveSubscriberEmailController@saveEmail'); 
};

Upvotes: 1

FULL STACK DEV
FULL STACK DEV

Reputation: 15941

Route::post('saveemail', 'SaveSubscriberEmailController@saveEmail');

Put this route into web middleware. you can do this like

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

   Route::post('saveemail', 'SaveSubscriberEmailController@saveEmail');

});

Change your controller to this.

class SaveSubscriberEmailController extends Controller
{

public function saveEmail(Request $request)
{



    $validator = validate($request->all(),[
        'email' => 'required|email|unique:subscribers|max:255',
    ]);

   if($validator->fails()){
    return back()->withErrors($validator);
 }



    $uuid = Uuid::uuid4();

    $subscriber = new subscriber();
    $subscriber->email = $request->email;
    $subscriber->uuid = $uuid->toString();
    $subscriber->created_at = Carbon::now();
    $subscriber->save();

    flash('Registration conformation email has been sent. Please check your mailbox. Thank you!')->success();
    return redirect()->back();
}

}

Hope this helps

Upvotes: 0

BM2ilabs
BM2ilabs

Reputation: 532

Request validation only send error of 422 not 500 if you are getting this error it's because of something else and the formRequest error bag won't catch this error .

Upvotes: 0

Related Questions