Theo tài liệu Symfony , một tuyến đường được xác định như dưới đây sẽ kích hoạt bộ điều khiển được chỉ định cho cả hai /hello/bob
và /hello/bob/bobby
:
_hello:
path: /hello/{names}
defaults: { _controller: \Drupal\mymodule\Controller\Main::Controller }
requirements:
_access: 'TRUE'
names: .+
Trong trường hợp yêu cầu /hello/bob/bobby
các {names}
param sẽ là "bob / bobby" (giảm còn nguyên vẹn) và nó sẽ lên tới bộ điều khiển để phá vỡ thành nhiều biến hoặc để lại nó như là một chuỗi duy nhất. Thủ thuật cho điều đó là regex đã thay đổi (". +") Được sử dụng để lọc {names}
param đó .
Bài đăng stackoverflow này cũng ngụ ý rằng regex tùy chỉnh có thể được sử dụng để cho phép dấu gạch chéo trong một tham số tuyến (ít nhất là trong Symfony 2).
Nếu tôi thử điều này với Drupal 8.0.0-beta15 thì nó không hoạt động và bộ điều khiển được chỉ định chỉ được kích hoạt cho một yêu cầu /hello/bob
. Tuy nhiên, tôi có thể xác nhận rằng điều này đã từng hoạt động trong các betas trước đó (tôi nghĩ cho đến ~ beta13).
Có điều gì đó đã thay đổi theo cách Drupal tích hợp với thành phần định tuyến Symfony sẽ giải thích điều này? Có lẽ có một cách khác để thực hiện việc truyền các dấu gạch chéo trong các thông số định tuyến? Tôi biết có một phong trào hướng tới Symfony 3.0 trong cốt lõi, nhưng tôi không chắc liệu điều đó có thể giải thích mọi thứ hay không.
Tôi cũng biết rằng các thuê bao tuyến có sẵn để quản lý các cấu trúc tuyến động. Tuy nhiên, trường hợp tôi đang làm việc đòi hỏi một sự kết hợp / số lượng tham số động gần như vô hạn ở cuối đường dẫn cơ sở (nhưng không đáng kể để phân tích cú pháp trong bộ điều khiển của tôi). Tôi cũng đang cố gắng tránh các chuỗi truy vấn (ví dụ /hello?names[]=bob&names[]=bobby
) cho trường hợp này.
Chủ yếu tôi chỉ bối rối khi ngắt kết nối với tài liệu Symfony, dường như nói rằng điều này là có thể.
Ghi chú bổ sung
Sau khi đăng câu hỏi này tôi phát hiện ra cuộc thảo luận này trong hàng đợi lõi D8: [Thảo luận] Thả tự động thông qua lập luận thêm: Y / N . Dường như kết luận rằng hỗ trợ "menu đuôi" (về cơ bản là những gì tôi sẽ theo sau) sẽ chính thức bị loại bỏ trong D8. Cuộc thảo luận đó đã kết thúc 3 năm trước và vì vậy tôi chỉ có thể đoán rằng một số chi tiết triển khai tổng quát hơn chưa được thực hiện đầy đủ cho đến gần đây (~ beta13). Điều này có thể giải thích tại sao bây giờ tôi chỉ nhận thấy sự thay đổi này.
Tôi đoán rằng Drupal (không phải Symfony) hiện đang tạo phản hồi 404 dựa trên yêu cầu được phân cách bằng dấu gạch chéo thô trước khi bất kỳ logic định tuyến cụ thể nào của Symfony phân tích tuyến đường (và đó là biểu thức chính quy cụ thể, v.v.). Nếu đây là trường hợp nó có thể giải thích tại sao kỹ thuật trên ngừng hoạt động. Tuy nhiên, tôi vẫn tự hỏi liệu có cách nào khác để giải quyết nhu cầu này mà tránh sử dụng thông số truy vấn và người đăng ký tuyến tùy chỉnh.