2017-06-30 3 views
-1

Je suis tout nouveau à Laravel, et je le bricole de différentes façons pour comprendre comment cela fonctionne. L'une des premières choses que j'ai essayées est de créer dynamiquement des routes en créant un fichier de configuration de routes qui est essentiellement un tableau de vues, et de les parcourir pour créer la route. Il ressemble à ceci:Réglage dynamique des routes dans Laravel 5.4

// Loop through the routes 
 
foreach(config("routes.web") as $route){ 
 

 
    $GLOBALS["tmp_route"] = $route; 
 

 
    // set the path for home 
 
    $path = ($route == "home" ? '/' : $route); 
 

 
    Route::get($path, function() { 
 
     return view($GLOBALS["tmp_route"]); 
 
    }); 
 

 
// foreach 
 
}

Je sais que la boucle fonctionne bien, mais ce que je reçois est 'Undefined index: tmp_route'.

Je suis confus quant à pourquoi cela ne fonctionne pas? Des idées? Si je fais écho sur le tmp_route, il échoue la valeur, mais échoue à la vue de retour (

+0

Pourquoi faites-vous de cette façon? "$ GLOBALS" dans une installation de Laravel me fait tiquer incontrôlable - c'est une mauvaise, mauvaise odeur de code et totalement inutile. – ceejayoz

+0

Plus que tout, j'essaie de comprendre comment exécuter Route :: se mettre dans une boucle par curiosité. Je suis ouvert aux suggestions. J'ai commencé avec Laravel il y a environ 2 heures. –

+0

Je n'ai jamais vu de problème nécessitant une boucle pour construire des routes. Plutôt que d'avoir un tableau de routes dans la config, vous devez simplement placer ces routes directement dans le fichier de route. Pour les routes totalement dynamiques et arbitraires, la réponse ci-dessous est bonne, mais dans la plupart des cas, vous allez avoir des routes comme 'file/1' ou' foo/bar'. – ceejayoz

Répondre

2

Nous n'utilisons généralement pas de boucles dans les routes, mais je n'ai jamais utilisé une boucle dans les routes si je me souviens bien. ma suggestion est de créer un itinéraire avec paramater et l'affecter à une méthode de commande par exemple:.

// Note that if you want a route like this, just with one parameter, 
// put it to end of your other routes, otherwise it can catch other 
// single hard-coded routes like Route::get('contact') 
Route::get('{slug}')->uses('[email protected]')->name('pages.show'); 

Puis dans votre PageController

public function show($slug) { 

    $view = $slug == '/'?'home':$slug; 
    return view($view);   

} 

avec cela, http://example.com/my-page rendra vues/ma page. blade.php view. Comme vous Vous pouvez voir que je lui ai aussi donné un nom, pages.show. Vous pouvez utiliser route helper pour créer des liens avec cette aide. par exemple.

echo route('pages.show','about-us'); // http://example.com/about-us 
echo route('pages.show','contact'); // http://example.com/contact 

Dans les modèles de lame:

<a href="{{ route('pages.show','about-us') }}">About Us</a> 

S'il vous plaît consulter la documentation pour plus et d'autres trucs cool