Puncte:0

Controler pe ruta /taxonomy/term/{taxonomy_term}

drapel lc

Am un controler obișnuit pe pagina de termeni de taxonomie (vizualizarea originală este dezactivată). Funcționează bine pentru a arăta ceea ce vreau să arate, totuși, nici ea getTitle nici ei acces este vreodată numit (al doilea fiind mai supărător, desigur). Problema nu este cu controlerul meu, deoarece utilizarea unei alte rute funcționează bine:

example.content.documents_list:
  cale: „/taxonomy/term/{taxonomy_term}”
  implicite:
    _controller: „\Drupal\example\Controller\DocumentListController::conținut”
    _title_callback: „\Drupal\example\Controller\DocumentListController::getTitle”
  cerinte:
    _custom_access: „\Drupal\example\Controller\DocumentListController::access”

exemplu.conținut.listă_documente2:
  cale: „/xxx/{taxonomy_term}”
  implicite:
    _controller: „\Drupal\example\Controller\DocumentListController::conținut”
    _title_callback: „\Drupal\example\Controller\DocumentListController::getTitle”
  cerinte:
    _custom_access: „\Drupal\example\Controller\DocumentListController::access”

Pot crea un RouteSubscriber daca este nevoie, dar chiar este nevoie? Aceste setări nu sunt niciodată preluate?

Kevin avatar
drapel in
Presupunând că accesul dvs. personalizat nu este etichetat corect. De ce să nu folosești TVI?
drapel lc
Și tot se numește când calea este diferită? Pentru că nevoile mele sunt drastic diferite. Controlerul meu decide ce să arate în funcție de mulți factori, înglobând diverse blocuri sau creând tabele după cum o impune situația.Acestea nu sunt rezolvabile cu vederi așa cum vreau eu să fie rezolvate. Sunt programator, așa că nu am probleme cu crearea de conținut cu propriul cod în loc de Views (nu mă înțelege greșit, nu am nimic împotriva Views și am câteva pe acest site, doar că sunt locuri unde o vizualizare nu este cea mai bună soluție).
4uk4 avatar
drapel cn
Vizualizarea este o modificare pentru o rută de entitate de bază deja existentă, care este reactivată atunci când dezactivați vizualizarea. Vedeți https://drupal.stackexchange.com/questions/241880/override-specific-routing-from-a-core-module
drapel lc
Aceasta a fost soluția probabilă la care am sugerat, dar între timp, am încercat o altă abordare și nu a reușit. Nu se aplică EnhancerInterface aici? Pot schimba $defaults['_title_callback'] primit cu altceva, dar nu are nicio diferență. (Am deja un amplificator pentru o altă rută, așa că a fost mai simplu să încerc să adaugi o altă condiție acolo).
drapel lc
Draga mea, aveam deja un abonat, am uitat cand l-am adaugat, doar ca a setat doar _controller-ul nu pe ceilalti... :-) O sa il copiez intr-un raspuns pentru eternitate. Mulțumesc pentru indicația corectă.
Puncte:1
drapel lc

A fost parțial greșeala mea, am avut o RouteSubscriber deja pe loc, dar nu este încă pe deplin angajat, așa cum a subliniat comentariul 4k4. Soluția finală este: da, trebuie înlocuită deoarece este o rută de sistem:

clasa RouteSubscriber extinde RouteSubscriberBase {

  funcția protejată alterRoutes(RouteCollection $colecție) {
    dacă ($rută = $colecție->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
drapel in
Pentru a clarifica, utilizați abonatul rutei pentru a modifica rutele existente **în loc de** să vă definiți rutele prin my_module.routing.yml?
drapel lc
Le am pe amandoua. Centura și bretele, știi. :-) Dar acum m-ai facut curioasa, verific daca doar abonatul este suficient. Răspuns: abonatul singur este suficient. .yml în sine nu este.
Kevin avatar
drapel in
Yaml-ul îl definește, alter-ul modifică existentul - de aceea. Acea rută există deja.
apaderno avatar
drapel us
Abonații de rută sunt utilizați pentru a modifica o rută definită dintr-un alt modul; sunt echivalentul lui `hook_menu_alter()` în Drupal 7. Fișierele .routing.yml sunt echivalentul pentru `hook_menu()` în Drupal 7. Ca și în Drupal 7, nu le folosiți pe ambele pentru aceeași rută.
drapel lc
O mică întrebare sau remarcă atunci: dacă omit același lucru din .routing.yml, pierd confortul numelui de rută diferit și trebuie să îl folosesc pe cel original în codul meu. Specificarea acestuia atât acolo, cât și în abonat pare să ofere tot ce este mai bun din ambele lumi, chiar dacă este redundantă: îmi pot folosi propriul nume de rută și tot este suprascris.
4uk4 avatar
drapel cn
Puteți elimina ruta de bază din abonatul rutei `$collection->remove('entity.taxonomy_term.canonical');`, astfel încât să nu aveți două rute pentru aceeași cale după ce ați adăugat propriul traseu în * .routing.yml. Avertisment: acest lucru ar putea rupe dependențele, de exemplu în linkurile meniului.
4uk4 avatar
drapel cn
Nu există nicio problemă să ai două rute pentru aceeași cale, dar are sens doar dacă diferă atunci când se potrivesc rutei, de exemplu având protocoale diferite. În caz contrar, potrivirea rutei are ca rezultat un comportament aleatoriu. Având același controler, nu observați comportamentul aleatoriu acum, dar acest lucru ar putea fi dificil de depanat mai târziu când schimbați una dintre rute.
4uk4 avatar
drapel cn
Deci, este probabil cea mai bună idee să utilizați ruta originală în codul dvs.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.