Bonjour,
je viens de suivre la formation Laravel 10 , je vous informe que j ai rencontré un probleme au moment de la modification de proprièté, la modification d une proprièté ne se passe pas elle me donne cette erreur

TypeError
PHP 8.2.4
10.31.0
App\Models\Property::attachFiles(): Argument #1 ($files) must be of type array, null given, called in C:\xampp\htdocs\ProjetLaravel\TutoAgence\app\Http\Controllers\Admin\PropertyController.php on line 78

<?php

namespace App\Http\Controllers\Admin;

use App\Models\Option;
use App\Models\Picture;
use App\Models\Property;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\Admin\PropertyFormRequest;

class PropertyController extends Controller
{

    public function __construct()
    {
        $this->authorizeResource(Property::class, 'property');
    }
    public function index()
    {
        return view('admin.properties.index', [
           'properties' => Property::orderBy('created_at', 'desc')->withTrashed()->paginate(25)
        ]);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        $property = new Property();
        $property->fill([
            'surface' => 40,
            'rooms' => 3,
            'bedrooms' => 1,
            'floor' => 0,
            'city' => 'Montpellier',
            'postal_code' => 34000,
            'sold' => false,
        ]);
        return view('admin.properties.form', [
            'property' => $property,
            'options' => Option::pluck('name', 'id'),
        ]);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(PropertyFormRequest $request)
    {
        $property = Property::create($request->validated());
        $property->options()->sync($request->validated('options'));
        $property->attachFiles($request->validated('pictures'));
        return to_route('admin.property.index')->with('success', 'Le bien a bien été créé');
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Property $property)
    {
        // $this->authorize('delete', $property);
        return view('admin.properties.form', [
            'property' => $property,
            'options' => Option::pluck('name', 'id'),
        ]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(PropertyFormRequest $request, Property $property)
    {
        $property->update($request->validated());
        $property->options()->sync($request->validated('options'));
        $property->attachFiles($request->validated('pictures'));
        return to_route('admin.property.index')->with('success', 'Le bien a bien été modifié');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Property $property)
    {
        Picture::destroy($property->pictures()->pluck('id'));
        $property->delete();
        return to_route('admin.property.index')->with('success', 'Le bien a bien été supprimé');
    }
}

**Ce que je veux**

Merci de m aider de resoudre ce probleme

**Ce que j'obtiens**

2 réponses


eliseekn
Réponse acceptée

Salut. J'ai pas suivi la formation, je vais donc me baser sur le code que tu as fourni.

S ta methode attachFiles doit récupérer des fichiers de la requête alors tu dois utiliser $request->file('pictures') à la place de $request->validated('pictures').

Merci bcp eliseekn pour votre reponse , je t informe que j ai résolu mon probleme : comme je declare $files type array j ai oublié d'ecrire les crochets [].
je dois utiliser ça $property->attachFiles([$request->file('pictures')]); au lieu de ça $property->attachFiles($request->file('pictures'));
public function store(PropertyFormRequest $request)
{
$property = Property::create($request->validated());
$property->options()->sync($request->validated('options'));
$property->attachFiles([$request->file('pictures')]);
return to_route('admin.property.index')->with('success', 'Le bien a bien été créé');
}
public function update(PropertyFormRequest $request, Property $property)
{
$property->update($request->validated());
$property->options()->sync($request->validated('options'));
$property->attachFiles([$request->file('pictures')]);
return to_route('admin.property.index')->with('success', 'Le bien a bien été modifié');
}

merci bcp pr ta réponse