Autour de Laravel

Paramètres optionnels dans les Url's Laravel 8

Avatar de AlexGraphicDesign
AlexGraphicDesign

Bonjour à tous !

Je me permets de vous contacter car j'ai un 'petit' soucis avec Laravel 8 que je suis en train d'essayer d'apprendre pour un projet au boulot (grâce aux tutos de bestmomo qui je crois est aussi sur ce forum =) ). Je vous explique :

Je refonds le site de l'entreprise dans laquelle je travaille qui commercialise des projets immobiliers et j'ai un petit soucis pour gérer comme il faut l'affichage de ceux-ci avec des paramètres optionnels sur les routes .

J'aimerais obtenir des URL's de la forme :

monsite.test/programmes/region/departement/programmex -> on affiche un programme

monsite.test/programmes/region/departement -> Tous les programmes d'un département

monsite.test/programmes/region -> Tous les programmes d'une région

monsite.test/programmes -> Tous les programmes sur tout le site (ça j'y arrive à peu près ^^)

Voici ce que j'ai dans mon fichier web.php (la route commentée c'est un test pour faire un affichage uniquement par ville mais ça ne fonctionne pas, problème de requête) :

//Programs routes
Route::prefix('programmes-immobiliers-neufs')->group(function () {
    Route::name('programs.index')->get('', [FrontProgramController::class, 'index']);
    //Route::name('programs.index')->get('{ville?}', [FrontProgramController::class, 'index']);
    Route::name('programs.display')->get('{idProgramme}', [FrontProgramController::class, 'show']);
});

et voici le contrôleur (désolé pour le code commenté, cela résulte de multitudes de tests) :

public function index(Request $request, $urlVille = null)
    {
 
    //   $regions = Departement::select('nomRegion', 'urlRegion','lienIdRegionDepartement')
    //                           ->groupBy('nomRegion')
    //                           ->get();
    //   $region = $regionUrl ? Departement::where('urlRegion', '=', $regionUrl)->firstOrFail() : null;
    //   $departements = Departement::select('nomDepartement', 'urlDepartement', 'lienIdRegionDepartement', 'idDepartement', 'numDepartement', 'nomRegion', 'urlRegion' )
    //                       ->groupBy('nomDepartement')
    //                       ->get();
    //   $departement = $departementUrl ? Departement::where('urlDepartement', '=', $departementUrl)->orderBy('idDepartement', 'desc')->firstOrFail() : null;
    //   $programs = $this->programRepository->getActiveOrderById($ville->idVille, $this->nbrPages);
    //   return view('front.programs.index', compact('ville', 'programs'));
      if($urlVille != null){
        $villes = Ville::select('nomVille', 'cpVille', 'urlVille', 'lienIdDepartementVille', 'idVille')->groupBy('nomVille')->get();
        $ville = $urlVille ? Ville::where('urlVille', '=', $urlVille)->orderBy('idVille', 'desc')->firstOrFail() : null;
        $programs = $this->programRepository->getActiveOrderByVille($ville->idVille, $this->nbrPages);
        return view('front.programs.index', compact('ville', 'programs'));
      }
 
        $programs = $this->programRepository->getActiveOrderById($this->nbrPages);
      }

DU COUP, ma question est : quelle est la bonne technique pour obtenir le résultat souhaité ? Suis-je au moins dans la bonne direction ? =)

Un grand merci à vous pour votre aide (j'ai aussi ouvert le sujet sur OpenClassRoom, désolé si cela fait doublon)

Posté il y a 2 mois
Avatar de bestmomo
bestmomo

Salut,

En fait moi je ferais plutôt un truc dans ce genre :

Route::prefix('programmes-immobiliers-neufs')->name('programs')->group(function () {
    Route::name('index')->get('', [FrontProgramController::class, 'index']);
    Route::name('region')->get('regions/{region}', [FrontProgramController::class, 'showRegion']);
    Route::name('departement')->get('regions/{region}/departements/{departement}', [FrontProgramController::class, 'showDepartement']);
    Route::name('programme')->get('regions/{region}/departements/{departement}/programmes/{programme}', [FrontProgramController::class, 'showProgramme']);
});

Comme ça on a des urls propres.

Regarde cette partie de la documentation.

Posté il y a 2 mois
Avatar de AlexGraphicDesign
AlexGraphicDesign

Merci bestmomo ! (content que tu m'apportes ton aide =) ) je vais étudier cette proposition là, je me permets de garder le sujet ouvert pour l'instant =)

Posté il y a 2 mois
Avatar de AlexGraphicDesign
AlexGraphicDesign

Il semblerait que j'ai réussi à faire quelque chose, c'est pas parfait parfait mais ça fonctionne, merci encore @bestmomo ! :)

Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.