Menurut dokumentasi Symfony , rute yang ditentukan di bawah ini akan memicu controller yang ditentukan untuk keduanya /hello/bob
dan /hello/bob/bobby
:
_hello:
path: /hello/{names}
defaults: { _controller: \Drupal\mymodule\Controller\Main::Controller }
requirements:
_access: 'TRUE'
names: .+
Dalam kasus permintaan untuk /hello/bob/bobby
para {names}
param akan "bob / bobby" (garis miring utuh) dan itu akan sampai ke controller untuk istirahat yang turun menjadi beberapa variabel atau meninggalkan itu sebagai satu string. Trik untuk itu adalah regex yang diubah (". +") Yang digunakan untuk memfilter {names}
param itu.
Posting stackoverflow ini juga menyiratkan bahwa regex kustom dapat digunakan untuk memungkinkan garis miring di param rute (setidaknya di Symfony 2).
Jika saya mencoba melawan Drupal 8.0.0-beta15 itu tidak tidak bekerja dan controller yang ditentukan hanya dipicu untuk permintaan untuk /hello/bob
. Namun, saya dapat mengkonfirmasi bahwa ini digunakan untuk beta sebelumnya (saya pikir sampai ~ beta13).
Apakah ada sesuatu yang berubah dalam cara Drupal terintegrasi dengan komponen perutean Symfony yang akan menjelaskan hal ini? Mungkin ada cara alternatif untuk menyelesaikan passing garis miring pada routing params? Saya tahu ada gerakan ke arah Symfony 3.0 pada intinya, tapi saya tidak yakin apakah itu bisa menjelaskan banyak hal.
Saya juga tahu bahwa pelanggan rute tersedia untuk mengelola struktur rute dinamis. Namun kasus yang saya kerjakan memerlukan kombinasi / jumlah parameter dinamis yang hampir tak terbatas di ujung jalur dasar (tetapi sepele untuk diuraikan dalam pengontrol saya). Saya juga mencoba menghindari string kueri (mis. /hello?names[]=bob&names[]=bobby
) Untuk kasus ini.
Terutama saya hanya bingung tentang pemutusan dengan dokumentasi Symfony, yang tampaknya menyatakan bahwa ini harus dimungkinkan.
catatan tambahan
Setelah posting pertanyaan ini saya menemukan diskusi ini dalam antrian inti D8: [Diskusi] Drop otomatis lewat argumen tambahan: Y / N . Tampaknya menyimpulkan bahwa dukungan "menu tail" (yang pada dasarnya adalah apa yang saya cari) akan secara resmi dijatuhkan di D8. Diskusi itu berakhir 3 tahun yang lalu dan jadi saya hanya bisa menebak bahwa beberapa implementasi spesifik yang lebih umum belum sepenuhnya terealisasi hingga saat ini (~ beta13). Ini mungkin menjelaskan mengapa saya baru sekarang memperhatikan perubahan ini.
Saya menduga bahwa Drupal (bukan Symfony) sekarang menghasilkan respons 404 berdasarkan permintaan mentah-terbatas dibatasi sebelum salah satu logika routing khusus Symfony lebih jauh membedah rute (dan itu adalah regex khusus param, dll.). Jika ini masalahnya dapat menjelaskan mengapa teknik di atas berhenti bekerja. Namun saya masih bertanya-tanya apakah ada cara-cara alternatif untuk menangani kebutuhan ini yang menghindari penggunaan params permintaan dan pelanggan rute kustom.
path: /hello/{names}
dan apa yang username: .+
harus dilakukan dengan satu sama lain.