Passing multiple parameters to controller in Laravel 5

118,727

Solution 1

When you define this route:

Route::get('events/{id}/remind', [
'as' => 'remindHelper', 'uses' => 'EventsController@remindHelper']);

You are saying that a single URI argument will be passed to the method.

Try passing the two arguments, like:

Route::get('events/{event}/remind/{user}', [
'as' => 'remindHelper', 'uses' => 'EventsController@remindHelper']);

View:

route('remindHelper',['event'=>$eventId,'user'=>$userId]);

Solution 2

Route :

Route::get('warden/building/{buildingId}/employee/{employeeId}',[
    'uses'=>'WardenController@deleteWarden',
    'as'=>'delete-warden'
]);

View :

<a href="{{route('delete-warden',[$building->id])}}"></a>

Controller:

public function deleteWarden($buildingId,$employeeId){
    $building = Building::find($buildingId);
    $building->employees()->detach($employeeId);
    return redirect('warden/assign/'.$buildingId)->with('message','Warden Detached successfully');

}
Share:
118,727
Cameron Scott
Author by

Cameron Scott

Updated on November 12, 2021

Comments

  • Cameron Scott
    Cameron Scott over 2 years

    In my application, a user has the ability to remind another user about an event invitation. To do that, I need to pass both the IDs of the event, and of the user to be invited.

    In my route file, I have:

    Route::get('events/{id}/remind', [
    'as' => 'remindHelper', 'uses' => 'EventsController@remindHelper']);
    

    In my view, I have:

    {!!link_to_route('remindHelper', 'Remind User', $parameters = array($eventid = $event->id, $userid = $invitee->id) )!!}
    

    In my controller, I have:

        public function remindHelper($eventid, $userid)
    {
        $event = Events::findOrFail($eventid);
        $user = User::findOrFail($userid);
        $invitees = $this->user->friendsOfMine;
        $invited = $event->helpers;
        $groups = $this->user->groupOwner()->get();
        return view('events.invite_groups', compact('event', 'invitees', 'invited', 'groups'));
    }
    

    However, when I hit that route, I receive the following error:

    Missing argument 2 for App\Http\Controllers\EventsController::remindHelper()
    

    I'm sure I have a formatting error in my view, but I've been unable to diagnose it. Is there a more efficient way to pass multiple arguments to a controller?