framework-web:symfony:td6

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
framework-web:symfony:td6 [2018/03/20 18:11] – créée jcheronframework-web:symfony:td6 [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1
Ligne 4: Ligne 4:
  
 |< 100% >| |< 100% >|
-| {{:framework-web:symfony:symfony_black_03.png?200&nolink|}} | Tous les exercices utilisent [[https://semantic-ui.com|Semantic-UI]] pour la partie CSS.|+| {{:framework-web:symfony:symfony_black_03.png?200&nolink|}} | Ce projet utilise le repository github : [[https://github.com/s4-dut-info-2018/boards-symfony|boards-symfony]].|
 <html></div></html> <html></div></html>
  
Ligne 11: Ligne 11:
  
 ===== Objectifs ===== ===== Objectifs =====
-  - Bases symfony + Doctrine +  - Factorisation du code 
-  - Requêtes Ajax, Composants+  - Réutilisation
  
-===== Partie 2 Administration =====+===== Prise en main ===== 
 + 
 +Vous pouvez au choix : 
 +  * Partir de votre propre projet et y inclure les éléments du projet Github 
 +  * Partir du projet GitHub pour y intégrer vos propres fonctionnalités (recommandé) 
 + 
 +A partir du dossier du projet, exécuter : 
 +<sxh bash ;gutter:false> 
 +composer update 
 +</sxh> 
 + 
 +Dans le fichier **.env**, ajuster la valeur de la variable **DATABASE_URL**. 
 + 
 +Démarrer le serveur (Mysql) et le serveur http de dévelopement : 
 +<sxh bash ;gutter:false> 
 +php bin/console server:run 
 +</sxh> 
 + 
 +===== Factorisation du code ===== 
 + 
 +==== Doctrine repositories ==== 
 +Les repositories de chacun des models héritent de **MainRepository**, définissant les opérations de base CRUD sur les objets. 
 + 
 +<classdiagram> 
 +[MainRepository|+get();+getAll();+setValuesToObject(object values);+update(object);+delete(object)],[DeveloperRepository]-^[MainRepository],[ProjectRepository]-^[MainRepository] 
 +</classdiagram> 
 + 
 +Chaque Repository héritant de MainRepository a juste à définir dans son constructeur la classe métier auquel il correspond :  
 +<sxh php;title:src/Repository/DeveloperRepository.php> 
 +<?php 
 + 
 +namespace App\Repository; 
 + 
 +use Symfony\Bridge\Doctrine\RegistryInterface; 
 +use App\Entity\Developer; 
 + 
 +class DeveloperRepository extends MainRepository{ 
 +    public function __construct(RegistryInterface $registry){ 
 +        parent::__construct($registry, Developer::class); 
 +    } 
 +
 +</sxh> 
 + 
 +==== Services Semantic ==== 
 +Les services Semantic de chacun des models héritent de **SemanticGui**, classe définissant les opérations utilisables dans tous les contrôleurs. 
 + 
 +<classdiagram> 
 +[SemanticGui|+dataTable(objects type);+dataForm(object type);+messageConfirmation(message type);+simpleElement(content);+realizeOperation(...);+getHeader(title subHeader icon)],[DevelopersGui]-^[SemanticGui],[ProjectsGui]-^[SemanticGui] 
 +</classdiagram> 
 + 
 +Chaque Classe Gui dérivée de **SemanticGui** doit logiquement redéfinir les méthodes **dataTable** et **dataForm**. 
 + 
 +==== CRUD contrôleurs ==== 
 +Chaque contrôleur pilotant une classe métier hérite de **CrudController**, qui définit l'ensemble des opérations CRUD. 
 + 
 +{{:framework-web:symfony:td6:crudcontroller.png?|}} 
 + 
 +  * Chaque Repository héritant de MainRepository utilise les méthodes protégées de **CrudController**. 
 +  * Le constructeur doit initialiser par injection de dépendances une instance de **MainRepository** et de **SemanticGui** dérivées dans son constructeur. 
 +<sxh php;title:src/Controller/DevelopersController.php> 
 +<?php 
 +class DevelopersController extends CrudController{ 
 +  
 + public function __construct(DevelopersGui $gui,DeveloperRepository $repo){ 
 + $this->gui=$gui; 
 + $this->repository=$repo; 
 + $this->type="developers"; 
 + $this->subHeader="Developer list"; 
 + $this->icon="users"; 
 +
 +    /** 
 +     * @Route("/developers", name="developers"
 +     */ 
 +    public function index(){ 
 +    return $this->_index(); 
 +    } 
 +     
 +    /** 
 +     * @Route("/developers/refresh", name="developers_refresh"
 +     */ 
 +    public function refresh(){ 
 +    return $this->_refresh(); 
 +    } 
 +     
 +    /** 
 +     * @Route("/developers/edit/{id}", name="developers_edit"
 +     */ 
 +    public function edit($id){ 
 +    return $this->_edit($id); 
 +    } 
 +     
 +    /** 
 +     * @Route("/developers/new", name="developers_new"
 +     */ 
 +    public function add(){ 
 +    return $this->_add("\App\Entity\Developer"); 
 +    } 
 + 
 +    /** 
 +     * @Route("/developers/update", name="developers_update"
 +     */ 
 +    public function update(Request $request){ 
 +    return $this->_update($request, "\App\Entity\Developer"); 
 +    } 
 +     
 +    /** 
 +     * @Route("/developers/confirmDelete/{id}", name="developers_confirm_delete"
 +     */ 
 +    public function deleteConfirm($id){ 
 +    return $this->_deleteConfirm($id); 
 +    } 
 +     
 +    /** 
 +     * @Route("/developers/delete/{id}", name="developers_delete"
 +     */ 
 +    public function delete($id,Request $request){ 
 +    return $this->_delete($id, $request); 
 +    } 
 +
 +</sxh> 
 + 
 +===== Fonctionnalités à implémenter ===== 
 +==== CRUD ==== 
 + 
 +<wrap mytodo>**<nowiki>//</nowiki>TODO 1.1**</wrap> 
 + 
 +Pour les models **Tag**, **Step**, **Task**, ajouter les fonctionnalités de base CRUD : 
 +  * Listage des instances dans une table 
 +  * Suppression 
 +  * Modification 
 +  * Ajout 
 + 
 +Consignes : 
 +  * Respecter la logique fonctionnelle et structurelle (implémentation) mise en place dans le projet initial 
 +  * Factoriser au mieux le code 
 + 
 +==== Route index ==== 
 + 
 +<wrap mytodo>**<nowiki>//</nowiki>TODO 1.2**</wrap> 
 + 
 +Modifier la route **index**, pour qu'elle affiche les éléments suivants, et qu'elle permette d'accéder à chacune des parties : 
 + 
 +{{:richclient:emberjs:td6:index-boards.png?900|page Index}}
  
  • framework-web/symfony/td6.1521565897.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)