Si tu fais pas un return à la fin de la méthode recup() forcément ça ne retourne rien...
public function recup() {
extract($this->getMedecinsAndDepartementByNumeroDepartement('1'));
return $medecins;
}
Y a tellement de choses qui vont pas dans ton code que ça en est un peu compliqué de t'aider.
Dans ta dernière méthode home() :
public function home()
{
$num = "";// définie vide puis jamais affectée
if (isset($_GET['recherche'])) {
$nom = ($_GET['recherche']);
} else {
$nom = "";
}
if (isset($_GET['{{dept}}'])) {// tu as vraiment un input name="{{dept}}" ??? de plus tu testes isset get {{dept}} mais tu affectes get nom...
$nom = ($_GET['nom']);
} else {
$nom = "";
}
// $nom vient de get recherche ou get nom ???
if (isset($_GET['num'])) {
$numero = ($_GET['num']);
} else {
$numero = "";
}
// $numero n'est jamais utilisé
// et hop on se refait un petit coup de get recherche déjà au début...
if (isset($_GET['recherche'])) {
$nom = ($_GET['recherche']);
} else {
$nom = "";
}
// la valeur $nom me semble assez incertaine... mais bon apparemment elle ne sert pas à grand chose puisqu'elle est juste transmise à la vue. Un {{ app.request.query.get('nom') }} dans twig pourrait faire l'affaire sans s'embêter dans le contrôleur.
// à non en fait c'est bien utilisé avec $this->getDept($nom) mais du coup la valeur est-elle bonne ?
return $this->render('medecin/home.html.twig', [
'title' => "Bienvenue sur le site",
'liste' => "Voici la liste des medecins✅",
'dept' => $this->getDept(),
'medecins' => $this->getMedecins(),
'recup' => $this->recup(),
'numero' => ($_GET['num']),// et si get num n'existe pas ???
'nom' => $nom,
'dept' => $this->getDept($nom),// y a déjà un dept au dessus... et puis t'es sur qu'il y a ce qu'il faut dans $nom ? et que getDept prend bien en compte le paramètre et retourne bien quelque chose ???
'lesDept' => $this->lesDepsNom($num),// $num est vide...
'meds' => $meds// $meds c'est quoi ça sort d'où ???
]);
}
Alors bon déjà essaie de nettoyer ton code, enlève tout ce qui ne sert à rien. Vérifie bien que les paramètres sont bien fournis et que tu as bien les retours qu'il faut sur les différentes méthodes et après on pourra voir peut être s'il y a encore des problèmes.
En restant simple, tu sembles faire du symfony, tu devrais donc avoir quelque chose comme le code ci-dessous. Ce n'est qu'un exemple ne sachant pas précisément ce que tu veux faire. C'est donc à adapter selon tes besoins spécifiques, mais à priori tu as la base pour faire ce que tu veux.
public function home(Request $request)
{
// le numéro de département est-il transmis dans la requête ?
if ($request->query->has('num')) {
// on récupère le département via son numéro
$departement = $this->getDoctrine()->getRepository(Dep::class)
->findOneBy([
'num' => $request->query->get('num')
]);
// si le département existe récupère les médecins du département
if ($departement)
$medecins = $this->getDoctrine()->getRepository(Medecin::class)
->findBy([
'departement' => $departement
]);
// si les relations sont biens définies dans les entités, pour récupérer les médecins du département il suffirait de faire
if ($departement)
$medecins = $departement->getMedecins();
}
// si $medecins n'est pas définie, initialise avec tous les médecins
if (!isset($medecins))
$medecins = $this->getDoctrine()->getRepository(Medecin::class)
->findAll();
return $this->render('medecin/home.html.twig', [
'departements' => $this->getDoctrine()->getRepository(Dep::class)->findAll(),
'departement' => $departement,// peut être null donc tester avant d'utiliser, dans twig {% if departement %}
'medecins' => $medecins,
]);
}
Et donc en simplifié tu pourrais avoir :
public function home(Request $request)
{
$departement = $request->query->has('num')
? $this->getDoctrine()->getRepository(Dep::class)
->findOneBy([
'num' => $request->query->get('num')
])
: null;
$medecins = $departement
? $departement->getMedecins()
: $this->getDoctrine()->getRepository(Medecin::class)
->findAll();
return $this->render('medecin/home.html.twig', [
'departements' => $this->getDoctrine()->getRepository(Dep::class)->findAll(),
'departement' => $departement,
'medecins' => $medecins,
]);
Pour compléter ci-dessous ce que devrait être les propriétés departement et medecins :
// dans App\Entity\Medecin
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Dep", inversedBy="medecins")
* @ORM\JoinColumn(nullable=false)
*/
private $departement;
// dans App\Entity\Dep
/**
* @ORM\OneToMany(targetEntity="App\Entity\Medecin", mappedBy="departement", orphanRemoval=true)
*/
private $medecins;