query('search', ''); $search = is_string($searchInput) ? trim($searchInput) : ''; $query = Client::query(); if ($search !== '') { $query->where(function ($query) use ($search) { $query->where('name', 'like', '%'.$search.'%') ->orWhere('email', 'like', '%'.$search.'%') ->orWhere('city', 'like', '%'.$search.'%'); }); } $clients = $query->orderBy('id')->paginate(10)->withQueryString(); return view('clients.index', compact('clients', 'search')); } // TP4 : formulaires et actions du CRUD (créer, voir, modifier, supprimer). public function create() { Gate::authorize('create', Client::class); return view('clients.create'); } // TP6 : Laravel valide le Form Request avant d'appeler cette méthode. public function store(StoreClientRequest $request) { Gate::authorize('create', Client::class); Client::create($request->validated()); return redirect()->route('clients.index'); } public function show(Client $client) { Gate::authorize('view', $client); return view('clients.show', compact('client')); } public function edit(Client $client) { Gate::authorize('update', $client); return view('clients.edit', compact('client')); } public function update(UpdateClientRequest $request, Client $client) { Gate::authorize('update', $client); $client->update($request->validated()); return redirect()->route('clients.index'); } public function destroy(Client $client) { // TP8 : la Policy refuse cette action aux comptes non administrateurs. Gate::authorize('delete', $client); $client->delete(); return redirect()->route('clients.index'); } }