JohnnyQ
JohnnyQ

Reputation: 5119

Laravel 5 redirect to path with parameters (not route name)

I've been reading everywhere but couldn't find a way to redirect and include parameters in the redirection.

This method is for flash messages only so I can't use this.

return redirect('user/login')->with('message', 'Login Failed'); 

This method is only for routes with aliases my routes.php doesn't currently use an alias.

return redirect()->route('profile', [1]);

Question 1

Is there a way to use the path without defining the route aliases?

return redirect('schools/edit', compact($id));

When I use this approach I get this error

InvalidArgumentException with message 'The HTTP status code "0" is not valid.'

I have this under my routes:

Route::get('schools/edit/{id}', 'SchoolController@edit');

Edit

Based on the documentation the 2nd parameter is used for http status code which is why I'm getting the error above. I thought it worked like the URL facade wherein URL::to('schools/edit', [$school->id]) works fine.

Question 2

What is the best way to approach this (without using route aliases)? Should I redirect to Controller action instead? Personally I don't like this approach seems too long for me.

I also don't like using aliases because I've already used paths in my entire application and I'm concerned it might affect the existing paths if I add an alias? No?

Upvotes: 2

Views: 3421

Answers (2)

lagbox
lagbox

Reputation: 50491

redirect("schools/edit/$id");

or (if you prefer)

redirect("schools/edit/{$id}");

Just build the path needed.

'Naming' routes isn't going to change any URI's. It will allow you to internally reference a route via its name as opposed to having to use paths everywhere.

Upvotes: 1

Yoram de Langen
Yoram de Langen

Reputation: 5499

Did you watch the class Illuminate\Routing\Redirector?

You can use:

public function route($route, $parameters = [], $status = 302, $headers = [])

It depends on the route you created. If you create in your app\Http\Routes.php like this:

get('schools/edit/{id}', 'SchoolController@edit');

then you can create the route by:

redirect()->action('SchoolController@edit', compact('id'));

If you want to use the route() method you need to name your route:

get('schools/edit/{id}', ['as' => 'schools.edit', 'uses' => 'SchoolController@edit']);

// based on CRUD it would be:
get('schools/{id}/edit', ['as' => 'schools.edit', 'uses' => 'SchoolController@edit']);

This is pretty basic.

PS. If your schools controller is a resource (CRUD) based you can create a resource() and it will create the basic routes:

Route::resource('schools', 'SchoolController');
// or
$router->resource('schools', 'SchoolController');

PS. Don't forget to watch in artisan the routes you created

Upvotes: 0

Related Questions