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