Điểm:0

Trình điều khiển trên tuyến /taxonomy/term/{taxonomy_term}

lá cờ lc

Tôi có một Trình điều khiển thông thường trên trang thuật ngữ phân loại (chế độ xem ban đầu bị tắt). Nó hoạt động tốt để hiển thị những gì tôi muốn nó hiển thị, tuy nhiên, nó cũng không getTitle cũng không phải của nó quyền đã bao giờ được gọi (dĩ nhiên là điều thứ hai khó chịu hơn). Vấn đề không nằm ở bộ điều khiển của tôi, bởi vì sử dụng một tuyến đường khác vẫn hoạt động tốt:

ví dụ.content.documents_list:
  đường dẫn: '/taxonomy/term/{taxonomy_term}'
  mặc định:
    _controller: '\Drupal\example\Controller\DocumentListController::content'
    _title_callback: '\Drupal\example\Controller\DocumentListController::getTitle'
  yêu cầu:
    _custom_access: '\Drupal\example\Controller\DocumentListController::access'

ví dụ.content.document_list2:
  đường dẫn: '/xxx/{taxonomy_term}'
  mặc định:
    _controller: '\Drupal\example\Controller\DocumentListController::content'
    _title_callback: '\Drupal\example\Controller\DocumentListController::getTitle'
  yêu cầu:
    _custom_access: '\Drupal\example\Controller\DocumentListController::access'

tôi có thể tạo một Tuyến đường thuê bao nếu cần nhưng có thực sự cần không? Có phải những cài đặt đó không bao giờ thực sự được chọn?

Kevin avatar
lá cờ in
Đoán quyền truy cập tùy chỉnh của bạn không được gắn thẻ đúng cách. Tại sao không sử dụng TVI?
lá cờ lc
Và nó vẫn được gọi khi đường dẫn khác đi? Bởi vì nhu cầu của tôi rất khác nhau. Bộ điều khiển của tôi quyết định hiển thị nội dung gì tùy thuộc vào nhiều yếu tố, nhúng các khối khác nhau hoặc tạo bảng tùy theo tình huống.Những điều đó không thể giải quyết được với các quan điểm theo cách tôi muốn chúng được giải quyết. Tôi là một lập trình viên, vì vậy không có vấn đề gì với việc tạo nội dung bằng mã của riêng tôi thay vì Chế độ xem (đừng hiểu lầm tôi, tôi không có gì chống lại Chế độ xem và tôi có một số ít trên trang web này, chỉ là có những nơi mà chế độ xem không phải là giải pháp tốt nhất).
4uk4 avatar
lá cờ cn
Chế độ xem là phần thay thế cho tuyến thực thể lõi hiện có, được bật lại khi bạn tắt Chế độ xem. Xem https://drupal.stackexchange.com/questions/241880/override-specific-routing-from-a-core-module
lá cờ lc
Đây là giải pháp khả thi mà tôi đã gợi ý nhưng trong khi chờ đợi, tôi đã thử một cách tiếp cận khác và không thành công. Không phải là EnhancerInterface áp dụng ở đây? Tôi có thể thay đổi $defaults['_title_callback'] sắp tới thành một thứ khác nhưng điều đó không tạo ra bất kỳ sự khác biệt nào. (Tôi đã có một trình tăng cường cho một tuyến đường khác, vì vậy sẽ đơn giản hơn khi thử thêm một điều kiện khác vào đó).
lá cờ lc
Ôi trời, tôi đã có một người đăng ký, tôi đã quên khi thêm nó, chỉ là nó chỉ đặt _controller chứ không phải những người khác ... :-) Tôi sẽ sao chép nó mãi mãi vào một câu trả lời. Cảm ơn con trỏ bên phải.
Điểm:1
lá cờ lc

Đó là một phần sai lầm của tôi, tôi đã có một Tuyến đường thuê bao đã sẵn sàng nhưng chưa tham gia đầy đủ, như nhận xét của 4k4 đã chỉ ra. Giải pháp cuối cùng là: vâng, nó phải được ghi đè vì đó là tuyến hệ thống:

lớp RouteSubscriber mở rộng RouteSubscriberBase {

  chức năng được bảo vệ alterRoutes(RouteCollection $collection) {
    if ($route = $collection->get('entity.taxonomy_term.canonical')) {
      $route->setDefault('_controller', 'Drupal\example\Controller\DocumentListController::content');
      $route->setDefault('_title_callback', 'Drupal\example\Controller\DocumentListController::getTitle');
      $route->setRequirement('_custom_access', 'Drupal\example\Controller\DocumentListController::access');
    }
  }

}
sonfd avatar
lá cờ in
Để làm rõ, bạn sử dụng trình đăng ký tuyến đường để thay đổi các tuyến đường hiện tại **thay vì** xác định các tuyến đường của bạn thông qua my_module.routing.yml?
lá cờ lc
Tôi có cả hai. Thắt lưng và niềng răng, bạn biết đấy. :-) Nhưng bây giờ bạn làm tôi tò mò, tôi kiểm tra xem chỉ cần người đăng ký là đủ. Câu trả lời: thuê bao của riêng mình là đủ. Bản thân .yml thì không.
Kevin avatar
lá cờ in
Yaml định nghĩa nó, thay đổi sửa đổi cái hiện có - đó là lý do tại sao. Tuyến đường đó đã tồn tại.
apaderno avatar
lá cờ us
Người đăng ký tuyến đường được sử dụng để thay đổi tuyến đường được xác định từ mô-đun khác; chúng tương đương với `hook_menu_alter()` trong Drupal 7. Các tệp .routing.yml tương đương với `hook_menu()` trong Drupal 7. Như với Drupal 7, bạn không sử dụng cả hai cho cùng một tuyến đường.
lá cờ lc
Sau đó, một câu hỏi hoặc nhận xét nhỏ: nếu tôi bỏ qua tên tương tự từ .routing.yml, tôi sẽ mất sự thoải mái với tên tuyến đường khác của mình và tôi phải sử dụng tên gốc trong toàn bộ mã của mình. Chỉ định nó cả ở đó và trong người đăng ký dường như mang lại điều tốt nhất cho cả hai thế giới, ngay cả khi thừa: Tôi có thể sử dụng tên tuyến đường của riêng mình và nó vẫn bị ghi đè.
4uk4 avatar
lá cờ cn
Bạn có thể xóa tuyến đường cốt lõi trong thuê bao tuyến đường `$collection->remove('entity.taxonomy_term.canonical');` để bạn không có hai tuyến đường cho cùng một đường dẫn sau khi bạn đã thêm tuyến đường của riêng mình vào * .routing.yml. Hãy cẩn thận: Điều này có thể phá vỡ các phụ thuộc, ví dụ như trong các liên kết menu.
4uk4 avatar
lá cờ cn
Không có vấn đề gì khi có hai tuyến đường cho cùng một đường dẫn, nhưng điều đó chỉ có ý nghĩa nếu chúng khác nhau khi khớp với tuyến đường, chẳng hạn như có các giao thức khác nhau. Mặt khác, tuyến đường phù hợp dẫn đến hành vi ngẫu nhiên. Bằng cách có cùng một bộ điều khiển, bạn hiện không nhận thấy hành vi ngẫu nhiên, nhưng điều này có thể khó gỡ lỗi sau này khi bạn thay đổi một trong các tuyến.
4uk4 avatar
lá cờ cn
Vì vậy, có lẽ ý tưởng tốt nhất là sử dụng lộ trình gốc xuyên suốt mã của bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.