Según la documentación de Symfony , una ruta definida a continuación debe activar el controlador especificado para ambos /hello/bob
y /hello/bob/bobby
:
_hello:
path: /hello/{names}
defaults: { _controller: \Drupal\mymodule\Controller\Main::Controller }
requirements:
_access: 'TRUE'
names: .+
En el caso de una solicitud para /hello/bob/bobby
el {names}
parámetro sería "bob / Bobby" (slash intacto) y sería hasta el controlador para dividirla en múltiples variables o dejarlo como una sola cadena. El truco para eso es la expresión regular alterada (". +") Utilizada para filtrar ese {names}
parámetro.
Esta publicación de stackoverflow también implica que la expresión regular personalizada se puede usar para permitir barras en un parámetro de ruta (al menos en Symfony 2).
Si intento esto contra Drupal 8.0.0-beta15 , no funciona y el controlador especificado solo se activa para una solicitud /hello/bob
. Sin embargo, puedo confirmar que esto solía funcionar en versiones anteriores (creo que hasta ~ beta13).
¿Ha cambiado algo en la forma en que Drupal se integra con el componente de enrutamiento de Symfony que explicaría esto? ¿Quizás hay una forma alternativa de lograr el paso de las barras en los parámetros de enrutamiento? Sé que hay un movimiento hacia Symfony 3.0 en el núcleo, pero no estoy seguro de si eso podría explicar las cosas.
También sé que los suscriptores de ruta están disponibles para administrar estructuras de ruta dinámicas. Sin embargo, el caso en el que estoy trabajando requiere una combinación / número casi infinito de parámetros dinámicos al final de una ruta base (pero que son triviales para analizar en mi controlador). También estoy tratando de evitar cadenas de consulta (por ejemplo /hello?names[]=bob&names[]=bobby
) para este caso.
Principalmente, estoy confundido en cuanto a la desconexión con la documentación de Symfony, que parece indicar que esto debería ser posible.
Notas adicionales
Después de la publicación de esta pregunta descubrí esta discusión en las colas centrales D8: [Discusión] gota automatizado pasando de argumento extra: S / N . Parece concluir que el soporte de "cola de menú" (que es esencialmente lo que busco) se eliminará oficialmente en D8. Esa discusión terminó hace 3 años y, por lo tanto, solo puedo adivinar que algunos de los detalles de implementación más generalizados no se realizaron por completo hasta hace poco (~ beta13). Esto puede explicar por qué solo ahora he notado este cambio.
Supongo que Drupal (no Symfony) ahora está generando una respuesta 404 basada en la solicitud delimitada por barra oblicua antes de que cualquiera de la lógica de enrutamiento específica de Symfony diseccione aún más la ruta (y es la expresión regular específica de param, etc.). Si este es el caso, podría explicar por qué la técnica anterior dejó de funcionar. Sin embargo, todavía me pregunto si hay formas alternativas de abordar esta necesidad que eviten el uso de parámetros de consulta y suscriptores de ruta personalizados.