Bug dans la formation laravel 10

Par majidhafid, il y a 2 ans


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, il y a 2 ans

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').

majidhafid, il y a 2 ans

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