jabrij93's avatar

Illuminate\Http\Request::Illuminate\Foundation\Providers\{closure}(): Argument #1 ($rules) must be of type array, Illuminate\Http\Request given ..

I got the following error when updating a form, Illuminate\Http\Request::Illuminate\Foundation\Providers{closure}(): Argument #1 ($rules) must be of type array, Illuminate\Http\Request given, called in D:\devwiz-developer\ipbt\vendor\laravel\framework\src\Illuminate\Macroable\Traits\Macroable.php on line 124 . I wonder what is the problem here ? Please help

The following are the code in the ProductsController.php,

/**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $categories = DB::table('kategori_jualan')->get();
        $types = DB::table('jenis_jualan')->get();

        return Inertia::render('Produk/Create', [
            'categories' => $categories,
            'types' => $types
        ]);
    }
public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'images.*' => 'image|max:2048', // max file size: 2MB
            'documents.*' => 'file|max:2048', // max file size: 2MB
        ]);

        DB::table('products')->insert([
            'name' => $request['name'],
            'description' => $request['description'],
            'type_id' => $request['type_id'],
            'category_id' => $request['category_id'],
            'price' => $request['price'],
            'start_date' => $request['start_date'],
            'end_date' => $request['end_date'],
            'is_password' => $request['is_password'],
            'is_stamping' => $request['is_stamping'],
            'created_at' => now(),
        ]);

        // handle image uploads
        if ($request->hasFile('images')) {
            foreach ($request->file('images') as $image) {
                $path = $image->store('public/images');
                DB::table('images')->insert([
                    'product_id' => $request->id,
                    'image_path' => Storage::url($path),
                    'created_at' => now(),
                ]);
            }
        }

        // handle document uploads
        if ($request->hasFile('documents')) {
            foreach ($request->file('documents') as $document) {
                $path = $document->store('public/documents');
                DB::table('documents')->insert([
                    'product_id' => $request->id,
                    'document_path' => Storage::url($path),
                    'created_at' => now(),
                ]);
            }
        }

        return Redirect::route('produk.index');
    }
public function update(Request $request, $id)
    {
        $request->validate($request, [
            'name' => 'required',
            'images.*' => 'image|max:2048', // max file size: 2MB
            'documents.*' => 'file|max:2048', // max file size: 2MB
        ]);

        // delete existing images and documents
        DB::table('images')->where('product_id', $id)->delete();
        DB::table('documents')->where('product_id', $id)->delete();
        Storage::deleteDirectory('public/images/' . $id);
        Storage::deleteDirectory('public/documents/' . $id);

        DB::table('products')->where('id', $id)->update([
            'name' => $request->input('name'),
            'description' => $request->input('description'),
            'type_id' => $request->input('type_id'),
            'category_id' => $request->input('category_id'),
            'price' => $request->input('price'),
            'start_date' => $request->input('start_date'),
            'end_date' => $request->input('end_date'),
            'is_password' => $request->input('is_password'),
            'is_stamping' => $request->input('is_stamping'),
            'updated_at' => now(),
        ]);

        // handle image uploads
        if ($request->hasFile('images')) {
            foreach ($request->file('images') as $image) {
                $path = $image->store('public/images/' . $id);
                DB::table('images')->insert([
                    'product_id' => $id,
                    'image_path' => Storage::url($path),
                    'created_at' => now(),
                ]);
            }
        }

        // handle document uploads
        if ($request->hasFile('documents')) {
            foreach ($request->file('documents') as $document) {
                $path = $document->store('public/documents/' . $id);
                DB::table('documents')->insert([
                    'product_id' => $id,
                    'document_path' => Storage::url($path),
                    'created_at' => now(),
                ]);
            }
        }

        return Redirect::route('produk.index');
    }
0 likes
5 replies
LaryAI's avatar
LaryAI
AI
Best Answer
Level 58

The issue is with the validate method in the update function. The first argument passed to the validate method should be an array of rules, but instead, the $request object is being passed. To fix this, replace $request with an array of rules.

Here's the updated update function:

public function update(Request $request, $id)
{
    $request->validate([
        'name' => 'required',
        'images.*' => 'image|max:2048', // max file size: 2MB
        'documents.*' => 'file|max:2048', // max file size: 2MB
    ]);

    // rest of the code
}
jabrij93's avatar

@LaryAI I've done as you requested above, now when trying to update the form again, the error says, SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "images" does not exist LINE 1: delete from "images" where "product_id" = $1 ^ , delete from "images" where "product_id" = 7 .

How can i fix this?

CamKem's avatar

Replace this validation code in your update method:

        $request->validate([
            'name' => 'required',
            'images.*' => 'image|max:2048', // max file size: 2MB
            'documents.*' => 'file|max:2048', // max file size: 2MB
        ]);

You have an extra $request in their

1 like
jabrij93's avatar

@CamKem I've done that, now I'm getting a new error, it says

SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "images" does not exist LINE 1: delete from "images" where "product_id" =  ^ , delete from "images" where "product_id" = 7 . 
CamKem's avatar

@jabrij93 This is a new error not related to validation. Please mark this question as solved, by setting the best answer. Then make a new thread post for this error & include, the error & your images migration code, so we have all the data needed to help.

Please or to participate in this conversation.