Développement de votre deuxième application : une base de données de films
-
Ce tutoriel suppose que vous êtes déjà familier avec les bases de la création d’une application :
- Si ce n’est déjà fait, préparez votre serveur en suivant le tutoriel Créer une application.
- Vous pouvez également réaliser votre première application Un carnet d’adresses vite fait bien fait pour avoir un aperçu des bases de la création d’un logiciel.
Vous apprendrez ici les bases de la structuration d’une application complète, incluant des classes d’objets métier reliées par différents types de relations.
Pour démarrer, créez une application movies comme vous avez créé helloworld et addresses, simplement en remplaçant le nom de votre projet comme suit :
cd /var/www/html wget https://gitlab.bappli.com/itrocks/framework/raw/master/init.php php ./init.php nickname movies
Spécifications du logiciel
Ce tutoriel va vous montrer comment créer une application plus complexe : plusieurs classes métier, avec des relations variées les unes avec les autres.
Votre logiciel doit permettre dans un premier temps de gérer les données suivantes :- Gérer une liste de personnalités liées au cinéma, incluant leur nom, prénom, nationalité, et les différents métiers du cinéma exercés
- Gérer une liste de fiches films, avec le titre, un résumé, la date de sortie, et le casting du film
- Stocker une liste de commentaires anonymes sur chaque film
Disclaimer : Nous parlons d’un framework conçu pour réaliser des logiciels de gestion : on parle donc bien là de réaliser un logiciel de gestion, pas un site internet. On ne s’intéresse donc pas pour l’instant de faire un site front pour le grand public qui permette de rechercher et afficher ces données, mais bien un site back-office qui permette la gestion efficace de ces données.
Écrivez vos classes métier
On pourrait donc avoir logiquement cinq classes métier : une par type de document / table de code géré :- Country : name : un pays
- Job : title. La liste des métiers étant figée, restreinte, et composée de termes simples, on pourra se passer d’une classe métier
- Personality : first_name, last_name, birth_place, jobs : une personnalité
- Movie : title, synopsis, date, casting : un film
- Comment : text : un commentaire
Comme pour le carnet d’adresses, l’écriture seule de vos classes métier et le paramétrage du menu de l’application permettent de faire fonctionner votre logiciel assez simplement :
nickname/movies/Country.php :
<?php namespace Nickname\Movies; use ITRocks\Framework\Traits\Has_Name; /** * @business */ class Country { use Has_Name; }
nickname/movies/Personality.php :
<?php namespace Nickname\Movies; /** * @business * @representative first_name, last_name * @sort last_name, first_name */ class Personality { /** * @mandatory * @var string */ public $first_name; /** * @mandatory * @var string */ public $last_name; /** * @link Object * @mandatory * @var Country */ public $birth_place; /** * @mandatory * @values actor, director, producer, writer * @var string[] */ public $jobs; /** * @return string */ public function __toString() { return trim($this->first_name . SP . $this->last_name); } }
nickname/movies/Movie.php :
<?php namespace Nickname\Movies; use ITRocks\Framework\Tools\Date_Time; /** * @business * @representative title * @set Movies */ class Movie { /** * @mandatory * @var string */ public $title; /** * @max_length 10000 * @multiline * @var string */ public $synopsis; /** * @link DateTime * @var Date_Time */ public $date; /** * @link Map * @var Personality[] */ public $casting; /** * @link Collection * @var Comment[] */ public $comments; /** * @return string */ public function __toString() { return strval($this->title); } }
nickname/movies/Comment.php :
<?php namespace Nickname\Movies; use ITRocks\Framework\Mapper\Component; /** * @business */ class Comment { use Component; /** * @composite * @link Object * @mandatory * @var Movie */ public $movie; /** * @mandatory * @min_length 100 * @max_length 10000 * @multiline * @var string */ public $text; /** * @return string */ public function __toString() { return strval($this->text); } }
nickname/movies/config.php :
<?php namespace Nickname\Movies; use ITRocks\Framework\Configuration; use ITRocks\Framework\Plugin\Priority; use ITRocks\Framework\Widget\Menu; global $loc; require __DIR__ . '/../../loc.php'; require __DIR__ . '/../../itrocks/framework/config.php'; $config['Nickname/Movies'] = [ Configuration::APP => Application::class, Configuration::ENVIRONMENT => $loc[Configuration::ENVIRONMENT], Configuration::EXTENDS_APP => 'ITRocks/Framework', Priority::NORMAL => [ Menu::class => [ Menu::TITLE => [SL, 'Home', '#main'], 'Movies database' => [ '/Nickname/Movies/Movies' => 'Movies', '/Nickname/Movies/Personalities' => 'Personalities' ] ] ] ];
N’oubliez pas de créer un fichier update dans le dossier racine du projet avant de rafraîchir votre page et afficher le résultat.
Et ensuite
Votre logiciel est déjà prêt : vous pouvez commencer à renseigner vos donnnées sur http://localhost/movies.
Pour faire suite ce tutoriel, vous pouvez étudier en détail le décryptage de l’application Movies pour en comprendre tous les mécanismes et pouvoir les appliquer à vos propres logiciels.
A partir de ce logiciel d’exemple, vous pouvez suivre ces autres tutoriels qui vous proposeront d’étudier l’ensemble des mécanismes du framework it.rocks par l’exemple, en faisant évoluer notre logiciel de gestion de base de données de films :- Localisez votre application : traduction, formats de nombres et de dates,
- Et d’autres tutoriels à venir…