framework-web:symfony:td6

Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
framework-web:symfony:td6 [2018/03/20 18:48] – [Prise en main] jcheronframework-web:symfony:td6 [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1
Ligne 27: Ligne 27:
 Dans le fichier **.env**, ajuster la valeur de la variable **DATABASE_URL**. Dans le fichier **.env**, ajuster la valeur de la variable **DATABASE_URL**.
  
-Démarrer les serveurs (Mysql) et le serveur de dévelopement :+Démarrer le serveur (Mysql) et le serveur http de dévelopement :
 <sxh bash ;gutter:false> <sxh bash ;gutter:false>
 php bin/console server:run php bin/console server:run
 </sxh> </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.1521568082.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)