Bonsoir, j'ai récemment réussi à faire un moteur de recherche sur symfony avec l'aide d'une personne très patiente ici même, et j'aimerai intégrer cette barre de recherche dans la nav du site afin que les utilisateurs puissent effectuer une recherche depuis n'importe quelle page du site (je sais pas si c'est clair^^) en gros depuis n'importe quelle page, je souhaite que lorsqu'on clique sur l'icône de la loupe de la navbar, qu'une barre de recherche descende du menu, pour que l'itilisateur puisse entrer sa recherche, et après validation, le site redirige automatiquement vers la page des résultats(chose déjà fonctionnelle).
Voici mon controller :
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Vehicule;
// use App\Model\Search;
// use Symfony\Component\BrowserKit\Request;
// use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use App\Repository\VehiculeRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\SearchType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Doctrine\ORM\EntityManager;
// use Doctrine\Common\Persistence\ObjectManager;
class HomeController extends AbstractController
{
/**
* @Route ("/", name="home")
*/
public function index () {
return $this->render('pages/home.html.twig');
}
/**
* @Route ("/Search", name="Search", methods={"GET","POST"})
*/
public function search(Request $request)
{
$form = $this->createFormBuilder()->add('recherche', SearchType::class)->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$em = $this->container->get('doctrine')->getManager();
$vehicules = $em->getRepository('App\Entity\Vehicule')->search($data['recherche']);
return $this->render('pages/Searchresult.html.twig', [
'vehicules' => $vehicules
]);
}
return $this->render('pages/Search.html.twig', [
'form' => $form->createView()
]);
}
}
Il me semble que la solution n'est pas (ou peu) côté php mais html, css voire javascript.
Utilises-tu bootstrap et Font Awesome ?
Je reformule :
Dans la <nav> du site, tu intègres une icone ou image de loupe qui se déplie et contient la zone de recherche.
C'est comme pour un menu déroulant : clic sur item (là l'icone) déplie le menu qui contient la zone de recherche avec un bouton qui va valider le lancement de la recherche via un lien sur l'action de recherche.
Quelques idées :
- peut-être que la zone plus le bouton cela va faire lourd en terme de présentation après dropdown. Tu pourrais :
* soit intégrer directement la zone de recherche dans le menu. Exemple avec Bootstrap https://getbootstrap.com/docs/4.3/components/navbar/ paragraphe Forms qui a justement une zone de recherche dans la barre.
* soit ouvrir une modale en milieu d'écran ce qui permet de fournir plus d'infos voire de critères de recherche.
J’ai essayé de faire en js, cacher le formulaire et le faire apparaître au clique, mais du coup je mets le {{form(form)}} directement dans le base.twig qui contient le menu, mais j’ai une erreur « form » n’existe pa, même en modifiant bien la route du controller 🤔🤔
Oui j’utilise font awesome pour la loupe, oui j’ai regardé je connais bien mais ça ne va pas du tout dans mon cas je trouve, la fenêtre modale est une très bonne idée ! Mais une fois faite j’aurai toujours le même problème, comment insérer le formulaire dans cette fenêtre ?
Le click sur la loupe déclenche l'ouverture de la modale de recherche. C'est donc juste une affaire html, css et js.
Ta modale peut-être déclarée dans le base mais c'est le js qui la rend visible.
C'est le bouton de validation de recherche dans la modale qui lance l'action de recherche. Et là tu te retrouves avec ce que tu as déjà fait. ... avec ce que nous avons déjà fait devrais-je dire
Oui mais faut bien que je déclare le {{form(form)}} dans le base.html.twig non ? Parce que quand je le fais j’ai une erreur à chaque fois ça me marque invalide. Je remplace bien la page search.html.twig par la modale sur le base ?
- Edité par EvilSpartans 17 septembre 2019 à 9:34:36
Qui peut m’aider 😬 ? Je comprends pas pourquoi lorsque je mets même le contenu directement sur le base.html.twig ça me dit que la variable form n’existe pas alors que sur sa page dédiée y’a aucun souci, c’est sûrement parce que je dois faire un truc sur les autres pages 🤔 il m’en fait voir de toutes les couleurs ce symfony 😂 mais c’est tellement pratique 🤷🏻♂️
Donc ta modale est mise visible (show) quand l'utilisateur click sur la loupe dans la barre de navigation via un javascript.
Dans ta modale il y a un champ de recherche mais qui est totalement indépendant du form de Symfony puisque c'est côté navigateur.
Quand l'utilisateur click sur submit de la modale, tu déclenches un javascript qui récupère le champ recherche de ta modale et va lancer l'action de recherche par un appel ajax.
Voilà comment je pratique et cela fonctionne très bien. Il y a sans doute d'autres solutions.
Ce n'est pas strictement la même solution que la recherche faite dans un précédent fil de discussion ... mais le besoin n'est pas le même non plus.
Je ne parlais pas encore de l'affichage ... juste de lancer la requête de recherche via la modale avec la donnée saisie dans la modale... comme d'bab tu ne comprends pas tout @AaFredericHusson
Mais je ne doute pas qu'une autre solution soit possible ... encore faut-il l'exprimer clairement et l'avoir mise en oeuvre.
donc du coup la page search.html.twig devient inutile ? Je ne me sers que de la modale, avec un formulaire indépendant, que je relie à l'action de recherche et à la redirection pour afficher les résultats ?
J'ai aussi changé mon code pour avoir une belle modale, là j'ai une erreur mais je pense que c'est une "grosse" connerie que j'ai faite dans le controller en essayant d'enlever la création du form car ça me renvoyait une page blanche
erreur :
Attempted to call an undefined method named "handleRequest" of class "App\Controller\HomeController".
Je sais pas trop comment modifier le controller là pour juste être redirigé vers les résultats du formulaires
- Edité par EvilSpartans 18 septembre 2019 à 22:59:15
Ça doit fonctionner comm j’essaye de faire je pense, mais je bloque sur les modifications du contrôleur vu que je n’ai pu besoin du form crée qui peut m’aider à le corriger pour le lier simplement au form fait à la main sur le base ?😬
Edit :J'ai réussi avec le formulaire fait à la main, placé dans une modale, et avec un input relié au controller voilà
- Edité par EvilSpartans 19 septembre 2019 à 15:49:31
fait plutot un redirectToRoute en incluant tes données de recherche
@moonkey3d c'est pas parce que ça fonctionne sur un projet qu'il faut obligatoirement l'utiliser sur tous les projets...
chaque projet est différent...
pour revenir au sujet tu as encore divers problèmes
$form n'existe pas vu que tu crée un formulaire en dur
- Edité par AaFredericHusson 19 septembre 2019 à 15:51:36
Pas d'aide concernant le code par MP ni par mail, le forum est là pour ça
[Symfony 4] Placer barre de recherche dans la nav
× 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.
Pas d'aide concernant le code par MP ni par mail, le forum est là pour ça
Pas d'aide concernant le code par MP ni par mail, le forum est là pour ça
Pas d'aide concernant le code par MP ni par mail, le forum est là pour ça
Pas d'aide concernant le code par MP ni par mail, le forum est là pour ça
Pas d'aide concernant le code par MP ni par mail, le forum est là pour ça
Pas d'aide concernant le code par MP ni par mail, le forum est là pour ça