{"id":20266536,"url":"https://github.com/gasycoder/essgam_cours_licence_2","last_synced_at":"2025-08-02T16:03:41.664Z","repository":{"id":251009386,"uuid":"835611243","full_name":"GasyCoder/essgam_cours_licence_2","owner":"GasyCoder","description":null,"archived":false,"fork":false,"pushed_at":"2024-08-02T06:33:48.000Z","size":1428,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-03T22:09:37.862Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GasyCoder.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-30T07:24:42.000Z","updated_at":"2024-08-02T06:33:51.000Z","dependencies_parsed_at":"2024-08-02T07:46:42.808Z","dependency_job_id":"db6fb57d-5938-4880-8d2c-fe98d8c4b8d8","html_url":"https://github.com/GasyCoder/essgam_cours_licence_2","commit_stats":null,"previous_names":["gasycoder/essgam_cours_licence_2"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/GasyCoder/essgam_cours_licence_2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GasyCoder%2Fessgam_cours_licence_2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GasyCoder%2Fessgam_cours_licence_2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GasyCoder%2Fessgam_cours_licence_2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GasyCoder%2Fessgam_cours_licence_2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GasyCoder","download_url":"https://codeload.github.com/GasyCoder/essgam_cours_licence_2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GasyCoder%2Fessgam_cours_licence_2/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268415794,"owners_count":24246809,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T12:09:52.025Z","updated_at":"2025-08-02T16:03:40.702Z","avatar_url":"https://github.com/GasyCoder.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Étapes pour Construire le Système de Gestion de Cours\r\n\r\n1. **Configurer la base de données**\r\n   - Modifier le fichier `config/database.php` pour configurer les paramètres de la base de données.\r\n\r\n2. **Définir les modèles**\r\n   - Créer les modèles dans le dossier `app/Models/` pour représenter les entités suivantes :\r\n     - `Etudiant`\r\n     - `Cours`\r\n     - `Inscription`\r\n\r\n3. **Créer les contrôleurs**\r\n   - Développer les contrôleurs dans le dossier `app/Controllers/` pour gérer les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) et l'affichage des pages. Exemple :\r\n     - `EtudiantController.php`\r\n     - `CoursController.php`\r\n     - `InscriptionController.php`\r\n\r\n4. **Définir les vues**\r\n   - Créer les fichiers de vue dans le dossier `app/views/` pour afficher les données. Exemple :\r\n     - `etudiant.blade.php`\r\n     - `cours.blade.php`\r\n     - `inscription.blade.php`\r\n\r\n\r\n5. **Mettre en place un point d'entrée**\r\n   - Assurer la configuration du point d'entrée dans le fichier `public/index.php`.\r\n\r\n\r\n6. ** Structure du Projet\r\n\r\nVoici la structure de répertoires du projet :\r\n\r\n\r\n\r\n## Description des Répertoires\r\n\r\n- **app/** : Contient le code principal de l'application.\r\n  - **Controllers/** : Contient les contrôleurs qui gèrent les interactions utilisateur et la logique de l'application.\r\n    - `BaseController.php` : Contrôleur de base pour les fonctions communes.\r\n    - `EtudiantController.php` : Gère les opérations liées aux étudiants.\r\n    - `CoursController.php` : Gère les opérations liées aux cours.\r\n    - `InscriptionController.php` : Gère les inscriptions des étudiants aux cours.\r\n  - **Models/** : Contient les modèles représentant les entités du domaine.\r\n    - `BaseModel.php` : Modèle de base pour les fonctionnalités partagées.\r\n    - `Etudiant.php` : Modèle représentant un étudiant.\r\n    - `Cours.php` : Modèle représentant un cours.\r\n    - `Inscription.php` : Modèle représentant une inscription.\r\n  - **views/** : Contient les vues de l'application.\r\n    - **etudiants/** : Vues pour gérer les étudiants.\r\n      - `index.blade.php` : Liste des étudiants.\r\n      - `create.blade.php` : Formulaire pour ajouter un nouvel étudiant.\r\n      - `edit.blade.php` : Formulaire pour modifier un étudiant existant.\r\n      - `show.blade.php` : Affichage des détails d'un étudiant.\r\n    - **cours/** : Vues pour gérer les cours.\r\n      - `index.blade.php` : Liste des cours.\r\n      - `create.blade.php` : Formulaire pour ajouter un nouveau cours.\r\n      - `edit.blade.php` : Formulaire pour modifier un cours existant.\r\n      - `show.blade.php` : Affichage des détails d'un cours.\r\n    - **inscriptions/** : Vues pour gérer les inscriptions.\r\n      - `index.blade.php` : Liste des inscriptions.\r\n      - `create.blade.php` : Formulaire pour ajouter une nouvelle inscription.\r\n\r\n- **config/** : Contient les fichiers de configuration de l'application.\r\n  - `database.php` : Configuration de la base de données.\r\n\r\n- **public/** : Contient les fichiers accessibles publiquement.\r\n  - `index.php` : Point d'entrée de l'application.\r\n\r\n- **vendor/** : Contient les dépendances de Composer.\r\n  - `autoload.php` : Fichier généré par Composer pour l'autoloading.\r\n\r\n- **composer.json** : Fichier de configuration de Composer pour gérer les dépendances PHP.\r\n- **composer.lock** : Fichier généré par Composer pour verrouiller les versions des dépendances.\r\n\r\n## Installation\r\n   `composer install`\r\n\r\n\r\n## Léçons :\r\n\r\n1. Modèle (Model)\r\nLe modèle représente la logique et les données de l'application. Il est responsable de la gestion de l'accès aux données et de leur manipulation. Le modèle est en charge des opérations suivantes :\r\n\r\n- Représenter les données de l'application.\r\n- Effectuer les opérations de CRUD (Créer, Lire, Mettre à jour, Supprimer) sur les données.\r\n- Gérer les règles de validation et les règles métier.\r\n- Interagir avec la base de données ou d'autres sources de données.\r\n\r\n\r\n\r\n2. Contrôleur (Controller)\r\nLe contrôleur est responsable de gérer la logique de l'application et de coordonner l'interaction entre le modèle et la vue. Il reçoit les requêtes de l'utilisateur, traite ces requêtes en utilisant les modèles et sélectionne les vues appropriées pour afficher les résultats. Le contrôleur effectue les tâches suivantes :\r\n\r\n- Recevoir et traiter les requêtes HTTP.\r\n- Utiliser les modèles pour obtenir ou modifier les données.\r\n- Sélectionner et renvoyer les vues appropriées pour afficher les données.\r\n\r\n\r\n3. Différences Clés\r\n\r\n* Rôle :\r\n\r\nModèle : Gère la logique de données de l'application. Il interagit avec la base de données et contient les règles métier.\r\nContrôleur : Gère la logique d'application et coordonne les interactions entre le modèle et la vue. Il reçoit les requêtes utilisateur et détermine les réponses appropriées.\r\n\r\n* Responsabilités :\r\n\r\nModèle : Représente les données et fournit des méthodes pour manipuler ces données.\r\nContrôleur : Traite les requêtes, utilise les modèles pour les opérations sur les données, et sélectionne les vues pour afficher les résultats.\r\nInteraction :\r\n\r\nModèle : Peut être utilisé par plusieurs contrôleurs pour accéder aux données et appliquer les règles métier.\r\nContrôleur : Interagit avec le modèle pour obtenir ou mettre à jour les données, puis sélectionne la vue pour la présentation.\r\n\r\nNB : les modèles s'occupent des données et des règles métier, tandis que les contrôleurs s'occupent des requêtes utilisateur et de la coordination entre les modèles et les vues.\r\n\r\n\r\n4. Rélation POO et la Structure du code\r\n\r\nLa relation entre la Programmation Orientée Objet (POO) et la structure du code, notamment dans un modèle MVC (Modèle-Vue-Contrôleur), est fondamentale pour organiser le code de manière modulaire, réutilisable et maintenable. Voici comment les concepts de POO se rapportent à la structure du code et comment ils sont appliqués dans une architecture MVC.\r\n\r\n\r\n## BaseController\r\n\r\nLa classe `BaseController` est une classe de base pour les contrôleurs dans notre application PHP. Elle fournit une méthode utile pour rendre les vues avec les données nécessaires.\r\n\r\n### Contenu du Fichier\r\n\r\n```php\r\n\u003c?php\r\n\r\nnamespace App\\Controllers;\r\n\r\nclass BaseController {\r\n    protected function render($view, $data = []) {\r\n        extract($data);\r\n        require __DIR__ . '/../views/' . $view . '.php';\r\n    }\r\n}\r\n\r\n\r\n## BaseModel\r\n\r\nLa classe `BaseModel` est une classe de base pour les modèles dans notre application PHP. Elle fournit des fonctionnalités communes pour interagir avec la base de données.\r\n\r\n### Contenu du Fichier\r\n\r\n```php\r\n\u003c?php\r\n\r\nnamespace App\\Models;\r\n\r\nuse PDO;\r\n\r\nclass BaseModel {\r\n    protected $pdo;\r\n    protected $table;\r\n\r\n    public function __construct(PDO $pdo, $table) {\r\n        $this-\u003epdo = $pdo;\r\n        $this-\u003etable = $table;\r\n    }\r\n\r\n    public function find($id) {\r\n        $stmt = $this-\u003epdo-\u003eprepare(\"SELECT * FROM {$this-\u003etable} WHERE id = ?\");\r\n        $stmt-\u003eexecute([$id]);\r\n        return $stmt-\u003efetch(PDO::FETCH_ASSOC);\r\n    }\r\n\r\n    public function all() {\r\n        $stmt = $this-\u003epdo-\u003equery(\"SELECT * FROM {$this-\u003etable}\");\r\n        return $stmt-\u003efetchAll(PDO::FETCH_ASSOC);\r\n    }\r\n\r\n    public function create(array $data) {\r\n        $columns = implode(', ', array_keys($data));\r\n        $placeholders = implode(', ', array_fill(0, count($data), '?'));\r\n        $stmt = $this-\u003epdo-\u003eprepare(\"INSERT INTO {$this-\u003etable} ({$columns}) VALUES ({$placeholders})\");\r\n        $stmt-\u003eexecute(array_values($data));\r\n        return $this-\u003epdo-\u003elastInsertId();\r\n    }\r\n\r\n    public function update($id, array $data) {\r\n        $set = implode(', ', array_map(fn($key) =\u003e \"{$key} = ?\", array_keys($data)));\r\n        $stmt = $this-\u003epdo-\u003eprepare(\"UPDATE {$this-\u003etable} SET {$set} WHERE id = ?\");\r\n        $data[] = $id;\r\n        return $stmt-\u003eexecute(array_values($data));\r\n    }\r\n\r\n    public function delete($id) {\r\n        $stmt = $this-\u003epdo-\u003eprepare(\"DELETE FROM {$this-\u003etable} WHERE id = ?\");\r\n        return $stmt-\u003eexecute([$id]);\r\n    }\r\n}\r\n\r\n\r\n\r\n## Model Etudiant :\r\nce quoi le mot clé parent? \r\n\r\nle mot-clé parent:: est utilisé pour appeler une méthode du parent de la classe courante. Plus précisément, parent::__construct() appelle le constructeur de la classe parente. ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgasycoder%2Fessgam_cours_licence_2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgasycoder%2Fessgam_cours_licence_2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgasycoder%2Fessgam_cours_licence_2/lists"}