Tôi thực sự đang sử dụng D9 để xây dựng một hệ thống với các thực thể sử dụng các thực thể phụ.
Hệ thống thực thể chính sử dụng đường dẫn sau: /item/{item}
Mỗi thực thể phụ có liên quan đến một thực thể chính và sử dụng đường dẫn sau: /item/{item}/sub_item/{sub_item}
Vì vậy, để truy cập biểu mẫu chỉnh sửa hoặc xóa, cần có các đường dẫn sau:
/item/{item}/sub_item/{sub_item}/chỉnh sửa
/item/{item}/sub_item/{sub_item}/xóa
Ví dụ: /item/1/sub_item/4/edit
Tôi đã khai báo lộ trình sau:
thực thể.sub_item.edit_form:
đường dẫn: '/item/{item}/sub_item/{sub_item}/edit'
mặc định:
_entity_form: 'sub_item.edit'
_title: 'Chỉnh sửa mục con'
tùy chọn:
_admin_route: ĐÚNG
thông số:
mục:
loại: thực thể:mục
with_config_overrides: ĐÚNG
mục con:
loại: thực thể:sub_item
with_config_overrides: ĐÚNG
yêu cầu:
_permission: 'quản lý cấu hình trang web'
Các liên kết Chỉnh sửa và Xóa được tạo bởi trình tạo danh sách từ getOperations. Trình tạo danh sách nằm trên tuyến đường sau: /item/1/sub_items (đây là "bộ sưu tập" để hiển thị các mục phụ được đính kèm với mục chính).
Tôi đã hy vọng rằng URL hiện tại chứa item/{item} có thể được trình tạo liên kết sử dụng lại trực tiếp, nhưng thực tế không phải vậy...
Symfony\Component\Routing\Exception\MissingMandatoryParametersException : Thiếu một số tham số bắt buộc ("mục") để tạo URL cho tuyến đường "entity.sub_item.edit_form".trong Drupal\Core\Routing\UrlGenerator->doGenerate() (dòng 181 của /core/lib/Drupal/Core/Routing/UrlGenerator.php).
Tôi đã cố gắng tạo một lớp htmlRouteProvider cụ thể cho lớp thực thể mục phụ của mình nhưng trong trường hợp này, các tuyến đường được tạo khi bộ nhớ cache bị xóa và tôi không có quyền truy cập vào mục trong URL để đặt nó...
Vì vậy, ... Câu hỏi của tôi là: Tôi đang thiếu thứ gì đó để thực hiện dễ dàng hoặc tôi phải triển khai lại phương thức "toUrl()" của lớp thực thể mục con của mình để bao gồm tham số "mục" mới "một cách nhanh chóng "?
Cảm ơn trước cho bất kỳ đề nghị.
Tái bút: đó là giải pháp tôi thực sự có trong lớp thực thể mục phụ của mình:
public function toUrl($rel = 'canonical', array $options = []) {
$uri = cha mẹ::toUrl($rel, $options);
$uri->setRouteParameter('item', \Drupal::routeMatch()->getRawParameter('item'));
trả lại $uri;
}
Nhưng có lẽ một giải pháp tốt hơn có thể được tìm thấy?