Ceci est une ancienne révision du document !
TD n°3
    | Tous les exercices utilisent Semantic-UI pour la partie CSS. | 
- Projet boards
 - Application gestion de projets SCRUM
 
Objectifs
- Bases symfony + Doctrine
 - Requêtes Ajax, Composants
 
Vous travaillez sur un outil permettant de gérer des projets.
Voici les principales caractéristiques du système d'information :
- Chaque projet [project] possède un nom, un descriptif, une date de début et de fin, et un propriétaire (owner, qui est un développeur)
 - L'équipe est constituée d'un ensemble de développeurs [developer].
 - Chaque User story [story] a un code et un descriptif, et appartient à un projet.
 - Il est possible de lui apposer des tags [tags], composés d'une couleur et d'un label.
 - Elle peut être affectée à un développeur[dev] (qui a juste une identité).
 - Elle peut contenir une liste de tâches [tasks], à réaliser ou réalisées.
 
Création du projet, intégration des composants
Exécuter le script de création de la base de données :
mysql -u root < path/to/boards.sql
Créer le projet boards
composer create-project symfony/skeleton boards
A partir du dossier de l'application, intégrer les principaux composants :
composer require annotations twig doctrine maker asset
Configurer la connexion à la base de données dans le fichier .env
Intégrer phpMv-UI toolkit :
composer require phpmv/php-mv-ui 2.3.x-dev
Générer les classes métier :
php bin/console doctrine:mapping:convert --from-database annotation ./src/Entity
Ajouter et lancer le serveur de développement :
composer require server --dev php bin/console server:run
Classes métier
Modifier les classes métier :
- Renommer les instances/collections associées ex: $idowner en owner dans la classe Project
 - Intégrer les classes au namespace App\Entity
 - Générer les accesseurs
 
Exemple pour la classe Project :
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
 * Project
 *
 * @ORM\Table(name="project", uniqueConstraints={@ORM\UniqueConstraint(name="projectName", columns={"name"})}, indexes={@ORM\Index(name="idOwner", columns={"idOwner"})})
 * @ORM\Entity
 */
class Project
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;
    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=100, nullable=false)
     */
    private $name;
    /**
     * @var string
     *
     * @ORM\Column(name="descriptif", type="text", length=65535, nullable=false)
     */
    private $descriptif;
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="startDate", type="date", nullable=false)
     */
    private $startdate;
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="dueDate", type="date", nullable=false)
     */
    private $duedate;
    /**
     * @var \Developer
     *
     * @ORM\ManyToOne(targetEntity="Developer")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="idOwner", referencedColumnName="id")
     * })
     */
    private $owner;
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Story", mappedBy="project")
     */
    private $stories;
    
    public function __construct(){
    	$this->stories=new ArrayCollection();
    }
}
 