Percorso Laravel 4 con numero illimitato di parametri

Sto provando a creare un path dinamico per un numero illimitato di livelli URL.

Ecco la mia rotta attuale

Route::get('{pageLink}', arrays('uses' => '[email protected]')); 

Questo funziona per il primo livello. Quindi un URL come something.com/foo/ functionrebbe. Ma se avessi qualcosa come something.com/foo/bar/ non prenderebbe quell'URL. Ne ho bisogno per abbinare livelli illimitati. In questo modo nel mio controller mi otterrà una variabile di qualunque sia l'integer collegamento.

So che potrei fare

 Route::get('{pageLink}', arrays('uses' => '[email protected]')); Route::get('{pageLink}/{pageLink2}', arrays('uses' => '[email protected]')); Route::get('{pageLink}/{pageLink2}/{pageLink3}', arrays('uses' => '[email protected]')); 

Ma sembra proprio un eccesso. C'è un modo migliore per farlo in modo che corrisponda alla fine dell'URL?

Grazie.

Puoi provare qualcosa come questo:

 //routes.php Route::get('{pageLink}/{otherLinks?}', '[email protected]')->where('otherLinks', '(.*)'); 

Ricorda di mettere il precedente alla fine (in basso) del file routes.php in quanto è come un path 'catch all', quindi devi prima definire tutti i routes 'più specifici'.

 //controller class SiteController extends BaseController { public function getPage($pageLink, $otherLinks = null) { if($otherLinks) { $otherLinks = explode('/', $otherLinks); //do stuff } } } 

Questo approccio dovrebbe consentire l'utilizzo di un numero illimitato di parametri, quindi questo è ciò che sembra necessario.

@Fusion https://laravel.com/docs/5.4/routing

È ansible limitare il formato dei parametri del path utilizzando il metodo where su un'istanza del path. Il metodo where accetta il nome del parametro e un'espressione regolare che definisce il modo in cui il parametro deve essere vincolato. quindi {id} è un parametro route e ->where('id', '[0-9]+') è un'espressione regolare per questo parametro. Se devi usare più dei parametri puoi fare qualcosa del genere:

 Route::get('user/{id}/{id2}', function ($id) { })->where('id', '[0-9]+')->where('id2', '[[0-9]+]'); Route::get('user/{id}', function ($id) { })->where('id', '[0-9]+');