Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

nickb6437's avatar

Inertia Redirect (vue/laravel/inertiaJs)

Really sorry if this has been covered before but I can't find a working solution and have even asked numerous work colleagues.

I have a form which sends a POST request to my MailController, validation and everything works just as expected, but on success, I want to redirect to a Thank you page. The Post request returns either a 200 or 302 depending on the method I try but every time it only sends the HTML to the response and doesn't render the component. I can, however, navigate to that page if I visit the URL and it loads perfectly.

I've tried to_route Inertia::render Redirect() Redirect()->route() Redirect::route() even sending it in response, catching it in Axio's request in the component, and redirecting from there.

This is driving me nuts I just can't see what I'm doing wrong.

TIA for your help and suggestions

//controller

<?php
namespace App\Http\Controllers;
use ...
use Inertia\Inertia;
use...

class MailController extends Controller
{
    public function sendEmail(Request $request)
    {

        $contact = $request->validate([
           ......
        ],[
			.......
        ]);

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

        return Redirect::route('thankyou');
	 	// return response()->json([
        //     'data' => $contact,
        //     'message' => 'Message sent successfully.',
        //     'redirect' => route('thankyou')
        // ], 201);
    }
}

// route 
Route::get('/thankyou', function () {
    return Inertia::render('Thankyou');
})->name('thankyou');

// submit function
 submitContact: function () {
        axios.post('/email', this.contact)
        .then(response => {
            console.log(response.data.redirect);
            // if (response.data.redirect) {
            //     return Inertia.location(response.data.redirect);
            // }
        }).catch(err => {
            const errors = err.response.data.errors;
            if (err) {
                Object.keys(errors).forEach(key => {
                    this.errors[key] = errors[key][0];
                });
            }
        })
    }
1 like
3 replies

Please or to participate in this conversation.