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.
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
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.
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>
php bin/console make:registration-form
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
composer require symfony/mime
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/