Score:0

ตัวควบคุมบนเส้นทาง /taxonomy/term/{taxonomy_term}

ธง lc

ฉันมีผู้ควบคุมปกติในหน้าเงื่อนไขอนุกรมวิธาน (มุมมองเดิมถูกปิดใช้งาน) มันใช้งานได้ดีเพื่อแสดงสิ่งที่ฉันต้องการให้แสดง แต่ก็ไม่เป็นเช่นนั้น รับชื่อเรื่อง หรือของมัน เข้าไป เคยถูกเรียก (อย่างที่สองน่ารำคาญกว่าแน่นอน) ปัญหาไม่ได้อยู่ที่คอนโทรลเลอร์ของฉัน เพราะการใช้เส้นทางอื่นนั้นใช้ได้ดี:

ตัวอย่าง.เนื้อหา.documents_list:
  เส้นทาง: '/taxonomy/term/{taxonomy_term}'
  ค่าเริ่มต้น:
    _controller: '\Drupal\example\Controller\DocumentListController::เนื้อหา'
    _title_callback: '\Drupal\example\Controller\DocumentListController::getTitle'
  ความต้องการ:
    _custom_access: '\Drupal\example\Controller\DocumentListController::การเข้าถึง'

ตัวอย่าง.content.documents_list2:
  เส้นทาง: '/xxx/{taxonomy_term}'
  ค่าเริ่มต้น:
    _controller: '\Drupal\example\Controller\DocumentListController::เนื้อหา'
    _title_callback: '\Drupal\example\Controller\DocumentListController::getTitle'
  ความต้องการ:
    _custom_access: '\Drupal\example\Controller\DocumentListController::การเข้าถึง'

ฉันสามารถสร้าง ผู้สมัครสมาชิกเส้นทาง ถ้าจำเป็น แต่จำเป็นจริงหรือ? การตั้งค่าเหล่านั้นไม่เคยเกิดขึ้นจริงหรือ

Kevin avatar
in flag
เดาว่าการเข้าถึงแบบกำหนดเองของคุณไม่ได้ติดแท็กอย่างถูกต้อง ทำไมไม่ใช้ TVI?
lc flag
แล้วยังจะโดนเรียกอีกเหรอว่าเส้นทางจะต่างกันยังไง? เพราะความต้องการของฉันแตกต่างกันอย่างมาก ตัวควบคุมของฉันตัดสินใจว่าจะแสดงอะไรโดยขึ้นอยู่กับหลายปัจจัย ฝังบล็อกต่างๆ หรือสร้างตารางตามที่สถานการณ์กำหนดสิ่งเหล่านี้ไม่สามารถแก้ไขได้ด้วยมุมมองในแบบที่ฉันต้องการให้แก้ไข ฉันเป็นโปรแกรมเมอร์ ดังนั้นไม่มีปัญหากับการสร้างเนื้อหาด้วยโค้ดของฉันเองแทนที่จะใช้ Views (อย่าเข้าใจผิด ฉันไม่มีอะไรขัดแย้งกับ Views และฉันมีบางอย่างในไซต์นี้ เพียงแค่มีที่ที่มุมมอง ไม่ใช่ทางออกที่ดีที่สุด)
4uk4 avatar
cn flag
มุมมองเป็นการแทนที่สำหรับเส้นทางเอนทิตีหลักที่มีอยู่แล้ว ซึ่งจะเปิดใช้งานอีกครั้งเมื่อคุณปิดใช้งานมุมมอง ดู https://drupal.stackexchange.com/questions/241880/override-specific-routing-from-a-core-module
lc flag
นี่เป็นวิธีแก้ปัญหาที่เป็นไปได้ที่ฉันบอกใบ้ แต่ในระหว่างนี้ ฉันลองวิธีอื่นและล้มเหลว ใช้ EnhancerInterface ที่นี่ไม่ได้หรือ ฉันสามารถเปลี่ยน $defaults['_title_callback'] ขาเข้าเป็นอย่างอื่นได้ แต่ก็ไม่ได้สร้างความแตกต่างอะไร (ฉันมีเอนแฮนเซอร์สำหรับเส้นทางอื่นอยู่แล้ว ดังนั้นการลองเพิ่มเงื่อนไขอื่นที่นั่นจึงง่ายกว่า)
lc flag
โอ้ ที่รัก ฉันมีผู้สมัครสมาชิกแล้ว ฉันลืมตอนที่ฉันเพิ่มมัน เพียงแค่ตั้งค่า _controller ไม่ใช่ตัวอื่น... :-) ฉันจะคัดลอกไปยังคำตอบชั่วนิรันดร์ ขอบคุณสำหรับตัวชี้ที่ถูกต้อง
Score:1
ธง lc

ส่วนหนึ่งเป็นความผิดพลาดของฉัน ฉันมี ผู้สมัครสมาชิกเส้นทาง มีอยู่แล้ว แต่ยังไม่มีส่วนร่วมอย่างเต็มที่ตามที่ความคิดเห็นของ 4k4 ชี้ให้เห็น ทางออกสุดท้ายคือ: ใช่ จะต้องถูกแทนที่เพราะเป็นเส้นทางของระบบ:

คลาส RouteSubscriber ขยาย RouteSubscriberBase {

  ฟังก์ชันที่ได้รับการป้องกัน alterRoutes (RouteCollection $collection) {
    ถ้า ($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
in flag
เพื่อให้ชัดเจนยิ่งขึ้น คุณใช้ผู้สมัครสมาชิกเส้นทางเพื่อแก้ไขเส้นทางที่มีอยู่ **แทน** ที่กำหนดเส้นทางของคุณผ่าน my_module.routing.yml?
lc flag
ฉันมีทั้งสองอย่าง เข็มขัดและเหล็กดัดฟัน คุณรู้ไหม :-) แต่ตอนนี้คุณทำให้ฉันอยากรู้ ฉันตรวจดูว่าแค่สมาชิกก็เพียงพอแล้ว คำตอบ: สมาชิกเพียงอย่างเดียวก็เพียงพอแล้ว .yml ในตัวมันเองไม่ใช่
Kevin avatar
in flag
yaml กำหนดมัน การเปลี่ยนแปลงแก้ไขสิ่งที่มีอยู่ - นั่นคือเหตุผล เส้นทางนั้นมีอยู่แล้ว
apaderno avatar
us flag
ผู้สมัครสมาชิกเส้นทางใช้เพื่อเปลี่ยนเส้นทางที่กำหนดจากโมดูลอื่น ซึ่งเทียบเท่ากับ `hook_menu_alter()` ใน Drupal 7 ไฟล์ .routing.yml นั้นเทียบเท่ากับ `hook_menu()` ใน Drupal 7 เช่นเดียวกับ Drupal 7 คุณไม่ได้ใช้ทั้งสองอย่างในเส้นทางเดียวกัน
lc flag
คำถามหรือข้อสังเกตเล็กๆ น้อยๆ หนึ่งข้อ: ถ้าฉันไม่ใส่ชื่อเดิมจาก .routing.yml ฉันจะสูญเสียความสะดวกสบายในการใช้ชื่อเส้นทางอื่นของฉัน และฉันต้องใช้ชื่อเดิมตลอดทั้งรหัสของฉัน การระบุทั้งที่นั่นและในผู้สมัครสมาชิกดูเหมือนจะให้สิ่งที่ดีที่สุดจากทั้งสองโลก แม้ว่าจะซ้ำซ้อนก็ตาม: ฉันสามารถใช้ชื่อเส้นทางของตัวเองและยังคงถูกแทนที่ได้
4uk4 avatar
cn flag
คุณสามารถลบเส้นทางหลักในสมาชิกเส้นทาง `$collection->remove('entity.taxonomy_term.canonical');` เพื่อไม่ให้คุณมีสองเส้นทางสำหรับเส้นทางเดียวกันหลังจากที่คุณเพิ่มเส้นทางของคุณเองใน * .routing.yml คำเตือน: การดำเนินการนี้อาจทำให้การอ้างอิงเสียหายได้ เช่น ในลิงก์เมนู
4uk4 avatar
cn flag
ไม่มีปัญหาในการมีสองเส้นทางสำหรับเส้นทางเดียวกัน แต่จะสมเหตุสมผลก็ต่อเมื่อเส้นทางต่างกันเมื่อจับคู่เส้นทาง เช่น มีโปรโตคอลต่างกัน มิฉะนั้นการจับคู่เส้นทางจะส่งผลให้เกิดพฤติกรรมแบบสุ่ม การมีคอนโทรลเลอร์ตัวเดียวกันทำให้คุณไม่สังเกตเห็นพฤติกรรมแบบสุ่มในตอนนี้ แต่อาจแก้ไขจุดบกพร่องได้ยากในภายหลังเมื่อคุณเปลี่ยนเส้นทางใดเส้นทางหนึ่ง
4uk4 avatar
cn flag
ดังนั้นจึงเป็นความคิดที่ดีที่สุดที่จะใช้เส้นทางเดิมตลอดรหัสของคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา