phplaravellaravel-request

Laravel - Too few arguments 0 passed


What's wrong with my code? I get ArgumentCountError with message

Too few arguments to function App\Http\Controllers\UserController::add(), 0 passed

Controller's function

public function add($request){
    $request->validate([
        'name' => 'required|string|max:50',
        'email' => 'required|string|email|max:50|unique:tblmember,Email',
    ]);
    $newid = DB::table('tblmember')->insertGetId([
        'name' => $request->name,
        'email' => $request->email,
    ]);
    return response()->json(['message' => 'Member added successfully', 'MemberID' => $newid], 201);
}

Route

Route::post('/users/add', [UserController::class, 'add'])->name('users.add');

Ajax

$.ajax({
   url: "/users/add",
   type: "POST",
   data: {
      name : name,
      email : email,
         _token : "{{ csrf_token() }}"
      },
      success: function(response) {
         ...
      },
      error: function(xhr) {
         ...
      }
   }
});

Solution

  • You must pass the Request class in your add method.

    So it would look like this.

    use Illuminate\Http\Request;
    
    public function add(Request $request){
        $request->validate([
            'name' => 'required|string|max:50',
            'email' => 'required|string|email|max:50|unique:tblmember,Email',
        ]);
        $newid = DB::table('tblmember')->insertGetId([
            'name' => $request->name,
            'email' => $request->email,
        ]);
        return response()->json(['message' => 'Member added successfully', 'MemberID' => $newid], 201);
    }
    

    This is mentioned here in the laravel docs.

    Without the Request class, laravel won't know how to inject your `$request` variable, and causes the error you posted.

    Hope this helps,

    Regards