Ajouter les contrôleurs du CRUD pour la table devis
Pour ajouter les fonctions CRUD (Create, Read, Update, Delete) dans DevisController.php dans un projet CodeIgniter, vous devez définir des méthodes pour chaque action. Voici un exemple de base pour chaque fonctionnalité :
Lire (Read)
Vous avez déjà la méthode index pour lister tous les devis. Pour afficher un devis spécifique, vous pouvez ajouter une méthode view :
public function view($id = null)
{
$devisModel = new DevisModel();
$data['devis'] = $devisModel->where('id', $id)->first();
if (empty($data['devis'])) {
throw new \CodeIgniter\Exceptions\PageNotFoundException('Cannot find the devis with id: ' . $id);
}
return view('devis/view', $data);
}
2. Créer (Create)
Pour créer un nouveau devis, vous aurez besoin de deux méthodes : une pour afficher le formulaire et une autre pour traiter les données soumises.
public function create()
{
return view('devis/create');
}
public function store()
{
$devisModel = new DevisModel();
$data = [
'client_name' => $this->request->getVar('client_name'),
// autres champs...
];
$devisModel->save($data);
return redirect()->to('/devis');
}
3. Mettre à jour (Update)
Comme pour la création, vous aurez besoin de deux méthodes : une pour afficher le formulaire de mise à jour et une autre pour traiter les données mises à jour.
public function edit($id = null)
{
$devisModel = new DevisModel();
$data['devis'] = $devisModel->where('id', $id)->first();
return view('devis/edit', $data);
}
public function update($id = null)
{
$devisModel = new DevisModel();
$data = [
'client_name' => $this->request->getVar('client_name'),
// autres champs...
];
$devisModel->update($id, $data);
return redirect()->to('/devis');
}
4. Supprimer (Delete)
Pour supprimer un devis, vous pouvez ajouter une méthode delete :
public function delete($id = null)
{
$devisModel = new DevisModel();
$devisModel->delete($id);
return redirect()->to('/devis');
}
Code complet DevisController.php
<?php
namespace App\Controllers;
use App\Models\DevisModel;
use App\Models\DevisItemModel;
use App\Models\ItemModel;
class DevisController extends BaseController
{
public function index()
{
$devisModel = new DevisModel();
$data['devis'] = $devisModel->findAll();
return view('devis/list', $data);
}
// Ajouter d'autres méthodes pour créer, afficher, et gérer les devis
public function view($id = null)
{
$devisModel = new DevisModel();
$itemModel = new ItemModel(); // Assurez-vous d'avoir un modèle pour les items
$data['devis'] = $devisModel->where('id', $id)->first();
if (empty($data['devis'])) {
throw new \CodeIgniter\Exceptions\PageNotFoundException('Cannot find the devis with id: ' . $id);
}
// Récupérer les items liés au devis avec leurs détails complets
$data['items'] = $devisModel->getDevisItemsWithDetails($id); // Cette méthode doit être définie dans DevisModel
return view('devis/view', $data);
}
public function create()
{
return view('devis/create');
}
public function store()
{
$devisModel = new DevisModel();
$data = [
'client_name' => $this->request->getVar('client_name'),
// autres champs...
];
$devisModel->save($data);
return redirect()->to('/devis');
}
public function edit($id = null)
{
$devisModel = new DevisModel();
$data['devis'] = $devisModel->where('id', $id)->first();
return view('devis/edit', $data);
}
public function update($id = null)
{
$devisModel = new DevisModel();
$data = [
'client_name' => $this->request->getVar('client_name'),
// autres champs...
];
$devisModel->update($id, $data);
return redirect()->to('/devis');
}
public function delete($id = null)
{
$devisModel = new DevisModel();
$devisModel->delete($id);
return redirect()->to('/devis');
}
public function compose()
{
$devisModel = new DevisModel();
$itemModel = new \App\Models\ItemModel();
// Récupérer les informations uniques des clients depuis la table devis
$data['clients'] = $devisModel->select('client_name')->distinct()->findAll();
$data['items'] = $itemModel->findAll();
return view('devis/compose', $data);
}
public function save()
{
$devisModel = new DevisModel();
$devisItemModel = new DevisItemModel();
// Récupération des données du formulaire
$client_name = $this->request->getVar('client_name');
$items = $this->request->getVar('items');
$quantities = $this->request->getVar('quantities');
// Création du devis
$devisData = [
'client_name' => $client_name,
'date_created' => date("Y-m-d H:i:s") // Date et heure actuelles
];
$devisModel->save($devisData);
$devis_id = $devisModel->getInsertID(); // Récupère l'ID du devis nouvellement créé
// Enregistrement des items du devis
foreach ($items as $item_id) {
$quantity = isset($quantities[$item_id]) ? $quantities[$item_id] : 1;
$devisItemData = [
'devis_id' => $devis_id,
'item_id' => $item_id,
'quantity' => $quantity
// 'custom_price' => ... si vous avez un prix personnalisé
];
$devisItemModel->save($devisItemData);
}
// Redirection ou affichage d'un message de succès
return redirect()->to('/devis'); // Redirige vers la liste des devis
}
}
Le DevisController dans CodeIgniter est un exemple de contrôleur MVC (Modèle-Vue-Contrôleur) qui gère les opérations liées aux devis dans une application. Voici une explication détaillée de chaque méthode dans ce contrôleur :
1. Méthode index()
- Objectif : Afficher une liste de tous les devis.
- Fonctionnement :
- Crée une instance de
DevisModel. - Utilise
findAll()pour récupérer tous les devis. - Passe les données à la vue
devis/list.
- Crée une instance de
2. Méthode view($id = null)
- Objectif : Afficher les détails d'un devis spécifique.
- Fonctionnement :
- Récupère le devis et ses items associés en utilisant l'ID fourni.
- Si le devis n'existe pas, une exception
PageNotFoundExceptionest levée. - Les détails du devis et des items sont passés à la vue
devis/view.
3. Méthode create()
- Objectif : Afficher un formulaire pour créer un nouveau devis.
- Fonctionnement :
- Renvoie simplement la vue
devis/create.
- Renvoie simplement la vue
4. Méthode store()
- Objectif : Enregistrer un nouveau devis dans la base de données.
- Fonctionnement :
- Récupère les données du formulaire.
- Utilise
DevisModelpour enregistrer ces données. - Redirige l'utilisateur vers la liste des devis après l'enregistrement.
5. Méthode edit($id = null)
- Objectif : Afficher un formulaire pour éditer un devis existant.
- Fonctionnement :
- Récupère les détails du devis à éditer en utilisant l'ID fourni.
- Passe ces détails à la vue
devis/edit.
6. Méthode update($id = null)
- Objectif : Mettre à jour les informations d'un devis existant.
- Fonctionnement :
- Récupère les données mises à jour du formulaire.
- Utilise
DevisModelpour mettre à jour le devis. - Redirige vers la liste des devis après la mise à jour.
7. Méthode delete($id = null)
- Objectif : Supprimer un devis existant.
- Fonctionnement :
- Utilise
DevisModelpour supprimer le devis spécifié par l'ID. - Redirige vers la liste des devis après la suppression.
- Utilise
8. Méthode compose()
- Objectif : Afficher un formulaire pour composer un devis avec des clients et des items.
- Fonctionnement :
- Récupère la liste des clients et des items disponibles.
- Passe ces listes à la vue
devis/compose.
9. Méthode save()
- Objectif : Enregistrer les détails d'un devis composé dans la base de données.
- Fonctionnement :
- Récupère les données du formulaire de composition du devis.
- Enregistre le devis et ses items associés en utilisant
DevisModeletDevisItemModel. - Redirige vers la liste des devis après l'enregistrement.
Chaque méthode dans ce contrôleur joue un rôle spécifique dans la gestion des devis, de leur création à leur affichage, en passant par leur modification et leur suppression. Ce contrôleur illustre bien l'approche MVC, où la logique métier est séparée de la présentation et de l'interaction avec la base de données.
Conclusion
Avec ces méthodes, vous avez un contrôleur CRUD de base pour votre système de devis. Vous devrez créer les vues correspondantes pour create, edit, et view. Assurez-vous également de gérer la validation des données et la sécurité, en particulier pour les opérations de création et de mise à jour.