Home > Mobile >  Too few arguments to function App\Http\Controllers\UserProfileController::userClockOut(), 1 passe
Too few arguments to function App\Http\Controllers\UserProfileController::userClockOut(), 1 passe

Time:12-17

I am trying to work through the below code and it is giving me the error as above in postman. I thought that by storing AttendanceRecord in a variable should've sufficed. I wonder what did I do wrong ? Below are the function in my UserProfileController, route in api.php and web.php. Please help.

Screenshot of my table in MySQL and migration table code:

https://paste.pics/f6103e8822c01f26bd23d500e0b0e9ad  
https://paste.pics/25f8fb016d87113211abfa47e18055d4 
https://paste.pics/008df0256fd5ec20caff3772194cc0cf 
https://paste.pics/66cca657a49944e8087451c3b75967d3 
public function userClockOut(Request $r, $tt, $tt2)
    {
        $result = [];
        $result['status'] = false;
        $result['message'] = "something error";

        $users = User::where('staff_id', $r->staff_id)->select(['staff_id', 'date_checkIn', 'time_checkOut', 'location_checkOut'])->first();

        $tt = AttendanceRecord::find($tt);
        $tt2 = AttendanceRecord::find($tt2);

        $tz = $tt->created_at;
        $tz2 = $tt2->updated_at;

        $date = Carbon::createFromFormat('Y-m-d', $tz, 'UTC');
        $time = Carbon::createFromFormat('H:i:s', $tz2, 'UTC');
        $date->setTimezone('Asia/Singapore');
        $time->setTimezone('Asia/Singapore');

        $users->date_checkIn = $date;
        $users->time_checkOut = $time;
        $users->location_checkOut = $r->location_checkOut;

        // Save the updated data to the database
        AttendanceRecord::updateOrCreate(
            ['staff_id' => $users->staff_id, 'date_checkIn' => $date],
            $users->toArray()
        );

        $result['data'] = $users;
        $result['status'] = true;
        $result['message'] = "suksess add data";

        return response()->json($result);
    }

Route in api.php

Route::post('login', [AuthController::class, 'login']);

Route::get('getdata', [UserProfileController::class, 'getdata']);
Route::post('getdata/{id}', [UserProfileController::class, 'showdata']);
Route::post('adduser', [UserProfileController::class, 'adddata']);
Route::delete('deleteuser', [UserProfileController::class, 'deleteuser']);
Route::PUT('updateuser', [UserProfileController::class, 'updateuser']);
Route::post('updateuserClockIn',   [UserProfileController::class, 'userClockIn']);
Route::post('updateuserClockOut', [UserProfileController::class, 'userClockOut']);

Route::middleware('auth:sanctum')->get('user', function (Request $request) {
    return $request->user();
});

Route in web.php

<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Artisan;
use App\Http\Controllers\UserController;
use App\Http\Controllers\DataFeedController;
use App\Http\Controllers\DashboardController;

Route::redirect('/', 'login');

// Register new staff
Route::get('register', [UserController::class, 'create'])->name('register');
Route::post('register', [UserController::class, 'store']);

// User list, view profile and update profile
Route::get('users', [UserController::class, 'index']);
Route::get('users/profile/{id}', [UserController::class, 'show']);
Route::get('users/profile/edit/{id}', [UserController::class, 'edit']);
Route::post('users/profile/edit/{id}', [UserController::class, 'update']);
Route::get('history', [UserController::class, 'history']);

Route::middleware(['auth:sanctum', 'verified'])->group(function () {

    // Route for the getting the data feed
    Route::get('/json-data-feed', [DataFeedController::class, 'getDataFeed'])->name('json_data_feed');

    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
    Route::fallback(function () {
        return view('pages/utility/404');
    });
});

CodePudding user response:

when you use vars in controller method, laravel considers this vars as url segments! it means that your route must change into:

Route::post('updateuserClockOut/{tt}/{tt2}', [UserProfileController::class, 'userClockOut']);

or if maybe you change them in method to have default values:

public function userClockOut(Request $r, $tt = null, $tt2 = null)

or even nullable them in route:

{tt?}/{tt2?}

CodePudding user response:

Based on the way you define the method, you should revise your route as follows:

Route::post('updateuserClockOut/{tt}/{tt2}', [UserProfileController::class, 'userClockOut']);

And in postman you can perform a post request like this (example): http:://yoursite/updateuserClockOut/13/102
Or to keep the route the same but send the parameters as request parameters, you can do this:

public function userClockOut(Request $r)
{
    $tt = AttendanceRecord::find($r->tt);
    $tt2 = AttendanceRecord::find($r->tt2);
    // ...
}

enter image description here

  • Related