Secondo la documentazione di Symfony , una route definita come di seguito dovrebbe attivare il controller specificato per entrambi /hello/bob
e /hello/bob/bobby
:
_hello:
path: /hello/{names}
defaults: { _controller: \Drupal\mymodule\Controller\Main::Controller }
requirements:
_access: 'TRUE'
names: .+
Nel caso di una richiesta per /hello/bob/bobby
il {names}
parametro sarebbe "bob / bobby" (slash intatto) e sarebbe fino al controllore per rompere che verso il basso in più variabili o lasciare come una singola stringa. Il trucco è l'alterata regex (". +") Usata per filtrare quel {names}
parametro.
Questo post StackOverflow implica anche che regex personalizzato può essere usato per consentire barre in un parametro di route (almeno in Symfony 2).
Se provo questo contro Drupal 8.0.0-beta15 lo fa , non il lavoro e il controller specificato viene attivato solo per una richiesta a /hello/bob
. Tuttavia, posso confermare che questo utilizzato per il lavoro in versioni beta precedenti (credo fino ~ beta13).
È cambiato qualcosa nel modo in cui Drupal si integra con il componente di routing di Symfony che spiegherebbe questo? Forse c'è un modo alternativo per realizzare il passaggio di barre nei parametri di routing? So che c'è un movimento verso Symfony 3.0 nel core, ma non sono sicuro che ciò possa spiegare le cose.
So anche che gli abbonati al percorso sono disponibili per gestire strutture di percorso dinamiche. Tuttavia, il caso su cui sto lavorando richiede una combinazione / numero quasi infinito di parametri dinamici alla fine di un percorso di base (ma che sono banali da analizzare nel mio controller). Sto anche cercando di evitare le stringhe di query (ad esempio /hello?names[]=bob&names[]=bobby
) per questo caso.
Principalmente sono solo confuso riguardo alla disconnessione con la documentazione di Symfony, che sembra affermare che ciò dovrebbe essere possibile.
Note aggiuntive
Dopo aver postato questa domanda ho scoperto questa discussione in code fondamentali D8: [Discussione] Goccia automatizzato passando di argomento extra: S / N . Sembra concludere che il supporto "menu tail" (che è essenzialmente quello che sto cercando) verrà ufficialmente abbandonato in D8. Quella discussione si è conclusa 3 anni fa e quindi posso solo immaginare che alcune delle specifiche di implementazione più generalizzate non siano state pienamente realizzate fino a poco tempo fa (~ beta13). Questo potrebbe spiegare perché ho notato solo ora questo cambiamento.
Immagino che Drupal (non Symfony) stia ora generando una risposta 404 basata sulla richiesta delimitata da barra grezza prima che una qualsiasi logica di routing specifica di Symfony analizzi ulteriormente il percorso (ed è regex specifico del parametro, ecc.). Se questo è il caso, potrebbe spiegare perché la tecnica sopra ha smesso di funzionare. Mi chiedo comunque se ci sono modi alternativi per far fronte a questa esigenza che evita l'utilizzo di parametri di query e abbonati personalizzati.