Voila je débute sur symfony et je rencontre un soucis pour récupérer une valeur à partir de paramètres spécifique.
Pour être plus clair j'ai un controller dans lequel je créer un formulaire de connexion (Je précise que j'ai fais ça par mes propres moyen, je suis pas passé par un security bidule truc).
L'entity de l'utilisateur est User qui contient donc 4 champs l'id le nom le mot de passe et le type (admin ou simple user)
Du code vaux mieux que des mots :
loginController
<?php
namespace App\Controller;
use App\Entity\User;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Session\Session;
class LoginController extends AbstractController
{
/**
* @Route("/login", name="login")
*/
public function index(Request $request, EntityManagerInterface $manager)
{
$user = new User();
$form = $this->createFormBuilder($user)
->setAction($this->generateUrl('login'))
->setMethod('POST')
->add('name', TextType::class, array(
'required' => true,
'attr' => array('class'=>'form-control','placeholder'=>'Nom utilisateur'),
'label_attr' => array('class' => 'sr-only'),))
->add('password', PasswordType::class, array(
'required' => true,
'attr' => array('class'=>'form-control','placeholder'=>'Mot de passe'),
'label_attr' => array('class' => 'sr-only'),))
->add('Se connecter', SubmitType::class,array(
'attr' => array('class' => 'btn btn-lg btn-success btn-block'),
))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$username = $form->get('name')->getData();
$password = $form->get('password')->getData();
$bdd = $manager->getRepository('App:User');
if ($bdd->findOneBy(['name' => $username,'password' => $password,])) {
$session = new Session();
$session->set('name', $username);
return $this->redirectToRoute('accueil');
}else {
echo "<div class='p-3 mb-2 bg-danger text-white'>ce compte n'existe pas</div>";
}
}
return $this->render('login/login.html.twig',
[
'form' => $form->createView(),
]);
}
}
Entity User:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
*/
class User
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="string", length=255)
*/
private $password;
/**
* @ORM\Column(type="string", length=255)
*/
private $type;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getPassword(): ?string
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getType(): ?string
{
return $this->type;
}
public function setType(string $type): self
{
$this->type = $type;
return $this;
}
}
C'est très brouillon ( oui je sais ) mais donc j'en viens au point ou, au moment ou l'utilisateur rentre ses identifiants, j'ai besoin de récupérer son type et le mettre dans une variable de session ! Donc ce qui résulterais à faire une simple ligne en SQL comme celle ci: SELECT type FROM user WHERE name = $username. Le soucis c'est que je ne trouve que des solution avec la selection entière de la table ce qui ne me convient pas puisque je souhaite sélectionner que le type !!
Merci beaucoup je ne connaissais même pas ce fichier ! (oui débutant débutant), autre question je récupère bien ma valeur mais sous forme d'array du coup ça me donne un tableau dans un tableau :/ Aurais-tu une solution pour convertir en string ou accèder a ce tableau de tableau ?
voila ce que ça me donne dans mon twig
Edit: je clos le sujet j'ai trouvé la réponse, pour ceux que ça intéresse la solution était d'appeler {{app.session.get('type').0.type}} voila merci encore
- Edité par HugoMartin32 15 février 2019 à 18:21:43
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Site les mathématiques amusantes pour vous détendre