Symfony 4 Un formulaire pour configurer l'accès à la base de données

Par hbenji, il y a 7 ans


Bonjour,

Je voudrais savoir s'il est possible de faire un formulaire pour permettre à l'utilisateur de gérer lui même l'accès à la base de données au lieu de mettre les infos en dur dans le fichier .env

Merci

2 réponses

Defy, il y a 7 ans

Oui, il faut coder ce qu'on appelle un installer, qui se lance au 1er demarage de ton app.

hbenji, il y a 7 ans

Bonjour,

Merci pour ta réponse, j'ai déjà commencé par ceci mais je ne sais pas si mon approche est bonne.

Donc je test si j'ai une connexion, si pas j'affiche le formulaire, si le formulaire est envoyé j'écris dans le fichier .env avec les données de connexion puis je fais une requête sql pour créer la base de données et je ré-écris dans le fichier pour insérer le nom de la base de données.

Voici mon controleur:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Dotenv\Dotenv; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\DateType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Doctrine\DBAL\Driver\Connection; //getconnection use App\Form\ConfigurationType; //le form class MainController extends AbstractController { /** * @Route("/main", name="main") */ public function index(Request $request) { /*test if connection bdd - ça marche - à ne pas faire? */ try{ $em = $this->getDoctrine()->getManager(); $em->getConnection()->connect(); $connected = $em->getConnection()->isConnected(); }catch(\Exception $e){ echo 'aucune connexion'.$e->getMessage(); $form = $this->createForm(ConfigurationType::class); if($request->isMethod('POST')){ $form->handleRequest($request); if($form->isSubmitted() && $form->isValid()){ //modification du fichier .env //$new_conf = "DATABASE_URL=mysql://".$data_form['username'].":".$data_form['password']."@".$data_form['adresse']."/".$data_form['bdd']; $new_conf2 = "DATABASE_URL=mysql://".$data_form['username'].":".$data_form['password']."@".$data_form['adresse']."/"; //écriture $lines = file('../.env'); $i = 0; $temp = ""; $trouve = 0; //recherche de la ligne à modifier foreach($lines as $line){ //echo $i." = ".$line; if(strstr($line, "DATABASE_URL")){ $trouve = 1; echo "C'est la bonne."; //$line = $new_conf."\n"; }else{ echo "Non"; $temp .= $line; } $i++; } echo "\nEcriture ds le fichier"; $temp .= $new_conf2; file_put_contents('../.env', $temp); echo "création de la bd"; print_r($_ENV['DATABASE_URL']); echo "\nTEST\n"; //création de la bdd $nom_db = "symfony_test"; /*ERREUR A CE NIVEAU*/ $sql ="CREATE DATABASE symfony_test"; $stmt = $em->getConnection()->prepare($sql); $result = $stmt->execute(); echo $result; //écriture dans le fichier $lines = file('../.env'); $temp = ""; $trouve = 0; $temp_url=""; //recherche de la ligne à modifier foreach($lines as $line){ //echo $i." = ".$line; if(strstr($line, "DATABASE_URL")){ $trouve = 1; echo "C'est la bonne."; $temp_url = $line; }else{ echo "Non"; $temp .= $line; } } echo "\nEcriture ds le fichier"; $temp .= $temp_url.$nom_db; file_put_contents('../.env', $temp); return $this->redirectToRoute('index'); }else{ return $this->render('config_database.html.twig', ['form_config' => $form->createView()]); } }else{ return $this->render('config_database.html.twig', ['form_config' => $form->createView()]); } } return $this->json([ 'message' => '-', 'path' => 'src/Controller/MainController.php', ]); } }