Skip to content

pjehan/dev8-trad-music-sf

Repository files navigation

Trad Music (Symfony)

Étapes de création du projet

Générer le projet Symfony :

composer create-project symfony/skeleton:"6.1.*" trad-music-sf

OPTIONNEL : si on veut la totale (Doctrine, Twig, Security...) :

cd trad-music-sf
composer require webapp

Installation de Maker Bundle (pour générer du code PHP) :

composer require maker --dev

Installation du profiler (barre de debug de Symfony) :

composer require profiler debug --dev

Cela permet d'avoir le profiler (debug bar) de Symfony et de pouvoir utiliser la fonction dump() dans les controlleurs ou les fichiers Twig.

Mise en place de la base de données

Installation de Doctrine :

composer require orm

Création du fichier .env.local :

DATABASE_URL="mysql://root:@127.0.0.1:3306/trad_music_sf?serverVersion=5.7&charset=utf8mb4"

Création de la base de données :

php bin/console doctrine:database:create

Création des entités :

php bin/console make:entity

La commande précédente permet de créer l'entité (classe PHP qui sera liée à une table en base de données par exemple instrument). Elle permet également de générer le repository (une classe qui va permettre de faire des requêtes SQL sur la table instrument).

ATTENTION ! Pour l'entité User, utiliser la commande :

php bin/console make:user

Création des fichiers de migration :

php bin/console make:migration

Exécution des migrations :

php bin/console doctrine:migrations:migrate

Installer DoctrineFixturesBundle :

composer req --dev orm-fixtures

Créer les fixtures :

php bin/console make:fixture

Exécution des fixtures :

php bin/console doctrine:fixtures:load # php bin/console d:f:l

Création d'une nouvelle page

OPTIONNEL : Installation de apache-pack (si on passe par WAMP) :

composer require symfony/apache-pack

Installation de Twig :

composer require twig

Création d'un controller :

php bin/console make:controller

TODO: Comment récupérer les données de la base de données dans un controlleur.

Gestion de l'authentification

Créer le formulaire de login

Documentation Symfony

php bin/console make:controller Login

Modifier le fichier config/packages/security.yaml pour ajouter le code suivant dans le main firewall :

form_login:
    login_path: app_login
    check_path: app_login
    enable_csrf: true

Modifier le controller LoginController :

#[Route('/login', name: 'app_login')]
public function index(AuthenticationUtils $authenticationUtils): Response
{
    // Récupérer les erreurs du formulaire s'il y a des erreurs
    $error = $authenticationUtils->getLastAuthenticationError();

    // Récupérer le dernier email saisi
    $lastUsername = $authenticationUtils->getLastUsername();

    return $this->render('login/index.html.twig', [
        'error' => $error,
        'last_username' => $lastUsername,
    ]);
}

Modifier le fichier Twig templates/login/index.html.twig :

{% block body %}
    {% if error %}
        <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
    {% endif %}

    <form action="{{ path('app_login') }}" method="post">
        <label for="username">Email:</label>
        <input type="text" id="username" name="_username" value="{{ last_username }}">

        <label for="password">Password:</label>
        <input type="password" id="password" name="_password">

        {# If you want to control the URL the user is redirected to on success
        <input type="hidden" name="_target_path" value="/account"> #}

      <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
      
        <button type="submit">login</button>
    </form>
{% endblock %}

Faire un lien vers la page de connexion :

<a href="{{ path('app_login') }}">Connexion</a>

Créer le formulaire de création de compte

php bin/console make:registration-form

Créer la déconnexion

Ajouter ces lignes dans le fichier config/packages/security.yaml dans le firewall main :

logout:
    path: app_logout

Ajouter ces lignes dans le fichier config/routes.yaml :

app_logout:
    path: /logout
    methods: GET

Gérer l'upload d'image

composer require symfony/mime

Installation du projet

Faire un fork du projet puis le cloner (git clone URL).

composer install
npm install

Création du fichier .env.local :

DATABASE_URL="mysql://root:@127.0.0.1:3306/trad_music_sf?serverVersion=5.7&charset=utf8mb4"

Création de la base de données :

php bin/console doctrine:database:drop --force
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate
php bin/console doctrine:fixtures:load

Générer les fichiers assets :

npm run watch

OPTIONNEL : démarrer le serveur PHP (ou utiliser le serveur Apache de WAMP) :

php -S localhost:8000 -t public/