Nous sommes le groupe Zinattendu, composé de Ismaël HACQUIN et de Mattéo DINVILLE.
JokeOnU est un site qui regroupe un certain nombre de blagues de tout genre, classé par catégories.
Pour pouvoir accéder aux blagues, il faut d'abord se connecter ou se créer un compte. Lorsque vous vous créez un compte, une blague vous ai automatiquement assigné.
Vous avez la possibilité d'aimer les blagues parmis toutes celles assignées au utilisateur, de ce fait un classement des utilisateurs est effectué en fonction du nombre de like qu'il a recu sur sa blague assignée.
Premièrement, avant de récuperer notre projet vous devez avoir une base de donnée sql et un mailtrap fait au préalable, ainsi vous devrez mettre les liens dans votre .env.local.
Voici un exemple de à quoi doit ressembler le votre :
DATABASE_URL="mysql://root:<password>@localhost:<port>/jokeonu?serverVersion=8.0&charset=utf8mb4
MAILER_DSN="smtp://localhost:<port>"
Tout d'abord pour utiliser notre site internet JokeOnU, vous devrez faire :
$ git clone [email protected]:Ynov-b2-sf-2022/zinattendu.git
Ensuite installer toutes les dépendances à l'aide des commandes :
$ composer install
$ npm install
Maintenant, il faut mettre en place la base de données à l'aide de la console symfony :
$ php bin/console doctrine:database:create
Importer les migrations :
$ php bin/console make:migration
$ php bin/console doctrine:migrations:migrate
Une fois que les migrations ont été faites, on remplit la base de données :
$ php bin/console doctrine:fixtures:load
Voici les différentes fonctionnalitées présentes sur notre application.
La route /login
:
Cette route permet à l'utilisateur de pouvoir se connecter à son compte de manière claire et sécurisée, c'est la page de base si vous voulez utilisez notre application sans compte.
La route /logout
:
Cette route permet à l'utilisatuer de pouvoir se déconnecter de son compte. le bouton déconnexion dans la page profil peut vous aider.
La route /register
:
Cette route permet à l'utilisateur de pouvoir se créer un compte, et ainsi renseigner ses informations à l'aide d'un formulaire. Quand une personne crée son compte il recoit automatiquement une newsletter.
La route /admin
:
Cette route est destinée uniquement à un utilisateur qui possède le role ADMIN sur le site internet. A l'aide du role ADMIN, il aura la possibilité de pouvoir ajouter, supprimer ou modifier un utilisateur via le back office.
La route /admin/user/
:
Sur cette route, le role ADMIN, à la possibilité de modifier, supprimer ou créer un utilisateur.
La route /admin/like/
:
Sur cette route, le role ADMIN, à la possibilité de modifier, supprimer ou créer un utilisateur.
La route /admin/joke/
:
Sur cette route, le role ADMIN, à la possibilité de modifier, supprimer ou créer une blague
Nous avons également mis en place la connexion à l'API.
Notre application est aussi dockerisé.
Dans la construction de notre site JokeOnU,
nous allons renseigner dans un ficher de variables d'environnement les coordonnées d'accès à la base de données, via la variable DATABASE_URL
.
Par la suite, on va pouvoir demander à Doctrine de créer la base de données pour nous avec la commande suivante :
$ php bin/console doctrine:database:create
L'assistant ligne de commande est plutôt clair et simple à utiliser. Choisissez pour chaque propriété que vous voulez créer son type, sa taille, nullable ou non, etc...
Pour créer des entités dans notre application, nous allons utiliser le Maker
:
$ php bin/console make:entity
Nous avons rempli notre base de données grâce aux Fixtures
de symfony avec la commande :
$ composer require --dev orm-Fixtures
La commande exécutée lors de l'installation a créé un fichier src/DataFixtures/AppFixtures.php
.
C'est dans ce fichier qu'on va créer nos objets et les enregistrer en base de données.
Notre fichier de fixtures, à la base, ressemble à quelque chose comme ça :
<?php
namespace App\DataFixtures;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
class AppFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
//...
$manager->flush();
}
}
Une fois que les données ont étaient mis en place dans le dossier "AppFixtures.php", nous lançons nos fixutres avec la commande :
$ php bin/console doctrine:fixtures:load
Pour ce qui concerne la fonctionnalité d'authentification, nous avons crée une entity User à l'aide de la commande :
$ php bin/console make:entity
Maintenant que l'entité a été générée, il nous faut mettre à jour la base de données :
$ php bin/console make:migration
$ php bin/console doctrine:migrations:migrate
Maintenant que nous avons notre entité "User" et que notre fichier de configuration "security.yaml" est à jour, nous avons mis en place nos pages de connexion et de déconnexion.
$ php bin/console make:auth
Deux routes sont disponibles :
Pour se connecter : "/login"
, qui a pour nom "app_login"
Pour se déconnecter : "/logout"
, dont le nom est "app_logout"
Une nouvelle commande de Symfony va générer de quoi faire cette création de compte :
$ php bin/console make:registration-form
Pour la partie back-office, qui nous permet de pouvoir modifier supprimer et ajouter des données, nous avons décidé de le mettre en place uniquement pour le Role_ADMIN
de notre application, pour cela nous avons lancer la commande sur notre entity User
, Joke
et Like
:
$ php bin/console make:crud User
$ php bin/console make:crud Joke
$ php bin/console make:crud Like
Pour sécuriser au maximum notre application, nous avons mis en place un role administrateur et donc un accès seulement pour les comptes possédant le Role_ADMIN
.
Pour cela, nous avons créé un nouveau controller à l'aide de la console symfony :
$ php bin/console make:controller Admin
La partie administrateur est accessible via la route /admin
. Il est important à savoir que seul les personnnes ayant le role admin peuvent avoir accés a cette route, de plus le seul moyen d'avoir accés a cette route une premiere fois c'est de se donner le role dans la base de donnée.
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class AdminController extends AbstractController
{
#[Route('/admin', name: 'app_admin')]
public function index(): Response
{
return $this->render('admin/index.html.twig', [
'controller_name' => 'AdminController',
]);
}
}
Pour la partie visuel de notre application, nous avions une maquette ainsi qu'un code couleur à respecter. Pour l'intégration de cette maquette, nous avons utiliser le moteur de templates Twig
que Symfony propose, à cela viennent s'ajouter du Bootstrap
et du CSS
.
Bootstrap à été installer via la documentation officiel de Bootstrap :
$ npm install bootstrap
Pour créer un formulaire dans notre projet, nous avons utiliser le MakerBundle :
$ php bin/console make:form
Pour permettre la possibilité d'un envoie de mail, nous avons mis en place un mailer à l'aide de la commande :
$ docker run -d --name=mailtrap -p 9999:80 -p 9998:25 eaudeweb/mailtrap
Se connecter à Mailtrap
via Docker Desktop
sur le port qui lui à été associé auparavant pour pouvoir récuperer le mail envoyé.
Dans notre cas, nous avons accès à Mailtrap via l'URL :
$ https://localhost:7423/
Lorsque notre base de données à été réalisé et fonction correctement, nous faisons une requête d'API, qui contient toutes les blagues.
Pour cela, lancer la commande :
$ compore require zuruuh/blagues-api
Voici un exemple qui nous permet de récuperer une blague random.
<?php
use Blagues\BlaguesApi;
class Main
{
public static main(): void
{
$blaguesApi = new BlaguesApi($_ENV['TOKEN']);
$joke = $blaguesApi->getRandom(); // Returns an object of class Blagues\Models\Joke
var_dump($joke->getJoke()); // This returns the actual joke.
var_dump($joke->getAnswer()); // And this return the answer to the joke if there is one.
}
}
Dans un premier temps, lorsque nous avons commencé à développer le projet Symfony, la base de données nous à posé quelques problèmes. Notamment au niveau des relations entre nos entités. Pour résoudre ce problème, nous avons à plusieurs reprise re créer une nouvelle base de données avec de nouvelles relation. Ce qui nous à pris pas mal de temps. Pour s'assurer que celle-ci était bien fonctionnel du début à la fin, nous avons insérer de fausses données à l'aide de faker et des fixtures de symfony.
Nous avons également rencontrés quelques soucis au niveau de nos fixtures, nous n'arrivions pas à insèrer toutes nos données dans chacune des tables. Cela était du à cause d'une relation OneToOne entre notre entité User et Joke, ou nos fixtures voulaient assignés 2 blagues pour un seul user, ce qui dans notre cas impossible.
(Pour résoudre cela, dans le fichier AppFixtures.php
nous avons retravaillé notre boucle FOR pour éviter ces soucis d'insertion.)
Egalement au niveau de l'API, au départ nous avions choisi d'utiliser le bundle HTTP Client de symfony, or nous nous sommes orienté vers une librairie wrapper qui à été crée sur l'api que nous avions choisi, cela nous a facilité la récuperation des blagues. De cette manière, nous avons eu besoin d'un token pour avoir accès à l'API et donc aux blagues proposées.
Pour cela, nous avons utiliser la commande :
$ composer require zuruuh/blagues-api
Cela nous a permis de récuperer les données de l'API et nous l'avons déposé dans le .env pour avoir l'accès de votre coté.
L'un des grand problème qui a pu arriver est un probléme de certificat ssl lors de l'appel d'API, en effet meme en retirant le 's' de https PHP ne changait pas la requète, le seul moyen de parvenir à faire cette appelle API était de changer des fichiers de configuration de php.ini.
Nous sommes très déçu, car lors de cette fin de projet, nous n'avons pas réussi à mettre en place le boutton like, qui permet de liker une blague pour le foncitonnement du classement...
Pour continuer l'avancée de notre application dans le futur, nous aimerions améliorer l'interface utilisateur de notre site qui à été bousculer par l'arriver des formulaires. Permettre à un utilisateur de pouvoir poster lui même sa blague sur le site. Et surtout optimiser tout le site (site trop lent).