Captain Hypertext
Captain Hypertext

Reputation: 2506

Using Laravel 5 Method Injection with other Parameters

So I'm working on an admin interface. I have a route set up like so:

Route::controllers([
    'admin' => 'AdminController',
]);

Then I have a controller with some methods:

public function getEditUser($user_id = null)
{
    // Get user from database and return view
}

public function postEditUser($user_id = 0, EditUserRequest $request)
{
    // Process any changes made
}

As you can see, I'm using method injection to validate the user input, so URL's would look like this:

http://example.com/admin/edit-user/8697

A GET request would go to the GET method and a POST request to the POST method. The problem is, if I'm creating a new user, there won't be an ID:

http://examplecom/admin/edit-user/

Then I get an error (paraphrased):

Argument 2 passed to controller must be an instance of EditUserRequest, none given

So right now I'm passing an ID of 0 in to make it work for creating new users, but this app is just getting started, so am I going to have to do this throughout the entire application? Is there a better way to pass in a validation method, and optionally, parameters? Any wisdom will be appreciated.

Upvotes: 4

Views: 1088

Answers (1)

lukasgeiter
lukasgeiter

Reputation: 152900

You can reverse the order of your parameters so the optional one is a the end:

public function postEditUser(EditUserRequest $request, $user_id = null)
{

}

Laravel will then resolve the EditUserRequest first and pass nothing more if there's no user_id so the default value will kick in.

Upvotes: 3

Related Questions