/ / Come escludere le lumache da un pattern di rotta di Laravel: laravel, laravel-routing, laravel-5.4, laravel-spark

Come escludere le lumache da un pattern di rotta di Laravel: laravel, laravel-routing, laravel-5.4, laravel-spark

Ho un'applicazione Laravel Spark e vorrei utilizzare i primi due parametri in un percorso per team e progetto, con eccezioni come about_us, impostazioni, api, ecc.

Ho impostato i miei percorsi, in modo simile a:

Route::pattern("team", "[a-zA-Z0-9-]+");
Route::pattern("project", "[a-zA-Z0-9-]+");

Route::get("/home", "HomeController@show");

Route::group(["prefix" => "{team}"], function () {
Route::get("/", "TeamController@dashboard");
Route::group(["prefix" => "{project}"], function () {
Route::get("/", "ProjectController@dashboard");
...

//Spark defines routes such as /settings after the apps routing file is processed;
//thus I cannot route to /settings as it"s caught by /{team}.

Sto lottando per fare una delle due cose. In alternativa, escludi valori come "api", "impostazioni" ecc. Dal modello {team}; o far eseguire le rotte di Laravel Spark prima delle mie rotte web, in modo da poter garantire che tutte le rotte valide vengano controllate prima del catch-all di / {team}.

Qualsiasi idea sarebbe apprezzata!

risposte:

5 per risposta № 1

Un suggerimento che ho, è considerare di avere il prefisso di teams, quindi il nome della squadra dopo, potresti trovare di voler aggiungere più tipi di catch-all come questo per un'altra sezione e incontrare più problemi lungo la linea. Forse elencando tutti i teams usare l'indice di questa chiusura potrebbe essere di beneficio anche agli amministratori del sistema?

Se ti piacerebbe continuare su questa strada, dai un'occhiata alla tua config.app.php, Credo che il passaggio ai seguenti due provider possa benissimo ottenere quello che stai cercando.

AppProvidersSparkServiceProvider::class, AppProvidersRouteServiceProvider::class,

Sto usando l'ultima versione di Spark dopo una recente installazione, questo sembra essere il default adesso, mi scuso se questa è un'arma rossa!


2 per risposta № 2

Mi sembra di averlo risolto, usando il seguente schema:

Route::pattern("team", "(?!^settings$)([a-zA-Z0-9-]+)");

Per coloro che sono nuovi alla domanda, ili principi sono i seguenti. In una semplice installazione di Laravel, è possibile riordinare i percorsi per assicurarsi che vengano elaborati nell'ordine corretto, inserendo caratteri jolly dopo i percorsi fissi.

Con Spark, ci sono un certo numero di percorsi tuttiincapsulato nel pacchetto Spark. Preferendo non scherzare con questo, consentendo più facili aggiornamenti di Spark più avanti tra le altre cose, è possibile usare a itinerario per limitare i valori accettabili per il parametro. Pertanto, con alcuni googling su RegExs, sembra che abbia trovato un pattern che escluderà le lumache corrispondenti al mio parametro {team}.

Credo che aggiungere ulteriori esclusioni sia facile come inserire un operatore di pipe.

Ciò ovviamente funzionerebbe anche su installazioni standard di Laravel, ma riordinare i percorsi è probabilmente una prima chiamata migliore.


0 per risposta № 3

È necessario definire i percorsi che si desidera escludereprimo. Quindi definisci i tuoi modelli sotto di loro. Avranno la precedenza sugli schemi perché nelle rotte di Laravel vengono valutate in ordine dall'alto al basso.