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

Default
,

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éponse

Default
,

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

Default
,

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',
        ]);
    }
}