


Erstellen Sie ein Drupal 8 -Modul: Routing, Controller und Menü -Links
Feb 21, 2025 am 09:45 AM
Kernpunkte
- Drupal 8 bewegt sich von prozeduraler Programmierung zu objektorientierter Architektur und integriert Code aus anderen Quellen durch das stolz gefundene Programm an anderer Stelle, einschlie?lich wichtiger Erg?nzungen wie Symfony-Komponenten.
- Erstellen eines Drupal 8 -Moduls erfordert das Definieren der erforderlichen Ordnerstruktur und -dateien, wie z. B.
.info.yml
Dateien. Die Ordner für benutzerdefinierte und Beitragsmodul befinden sich nun direkt unter dem Stammverzeichnismodules/
und der Kerncode wird in einen separatencore/
Ordner verschoben. - "Routing" in Drupal 8 ersetzt die
hook_menu()
-Funktion in Drupal 7 und nutzt die Symfony2 -Komponente. Dies beinhaltet die Definition der Route als Konfiguration und die Bearbeitung der Rückruffunktion im Controller. Die Routing -Datei des Modulsdemo.routing.yml
wird im Modul -Root -Ordner erstellt.
Der Menülink - wird nicht mehr über
hook_menu()
verarbeitet, sondern als Konfiguration in der YML -Datei deklariert. Erstellen Sie eine Datei mit dem Namendemo.menu_links.yml
im Modul -Root -Verzeichnis, um den Menülink und ihren Speicherort im vorhandenen Menü der Website zu definieren.
Beachten Sie, dass Drupal 8 zum Zeitpunkt des Schreibens, da es zum Zeitpunkt des Schreibens noch in der Entwicklung ist, ein Teil des Codes m?glicherweise veraltet ist. Bitte beziehen Sie sich in der Codebasis, in der ich versucht habe, den Beispielcode zu aktualisieren und ihn mit der neuesten Drupal 8 -Version kompatibel zu machen.
Drupal 8 führt viele ?nderungen vor und versucht, es mit anderen modernen PHP -Frameworks auszurichten. Dies bedeutet, dass die prozedurale Programmierung im alten PHP 4-Stil weitgehend durch objektorientierte Architektur ersetzt wurde. Um dies zu erreichen, enth?lt Drupal 8 im Rahmen des stolz gefundenen Programms an anderer Stelle Code, der nicht speziell für Drupal entwickelt wurde.
Eine der wichtigsten Erg?nzungen zum Drupal ist die Symfony -Komponente, die zwei Hauptauswirkungen auf Drupal -Entwickler hat. Erstens hat es das Potenzial, die Anzahl der Entwickler, die sich jetzt für Drupal entwickeln m?chten, erheblich zu erh?hen. Zweitens hat es einigen Drupal 7 -Entwicklern, denen es an modernen Erfahrung in der PHP -Praxis fehlt, einige Bedenken hinterlassen. Aber das ist in Ordnung, wir alle lernen, die Erfahrung, die wir aus Frameworks wie Symfony (und hoffentlich Drupal 8) gelernt haben, werden leicht verl?ngert und auf andere PHP -Frameworks angewendet.
In der Zwischenzeit befindet sich Drupal 8 in den sp?ten Stadien seines Ver?ffentlichungszyklus, wobei die aktuelle Version zum Zeitpunkt des Schreibens von Alpha11. Wir werden diese Version verwenden, um einige grundlegende ?nderungen in der Modulentwicklung zu pr?sentieren, auf die Drupal 7 -Entwickler zuerst begegnen und mit der Sie vertraut sein sollten. Ich habe eine Git -Codebasis eingerichtet, in der Sie den Code finden, den ich in dieser Serie geschrieben habe, und wenn Sie es vorziehen, k?nnen Sie so folgen und lernen.
Wie erstelle ich ein Modul?
Das erste, worauf wir uns konzentrieren müssen, ist das Definieren der erforderlichen Ordnerstrukturen und -dateien, damit Drupal 8 unsere neuen Module verstehen kann. In Drupal 7 müssen wir mindestens zwei Dateien (.info
und .module
) erstellen, aber in Drupal 8 reicht die YAML -Version des ersteren aus. Ja, die .info
-Datei wird nun durch die .info.yml
-Datei ersetzt, die ?hnliche Daten enth?lt, jedoch mit unterschiedlichen Strukturen.
Eine weitere gro?e ?nderung ist, dass die Ordner benutzerdefinierter und Beitragsmodul jetzt direkt zum Ordner Root Directory modules/
gehen. Dies liegt daran, dass der gesamte Kerncode in seinen eigenen separaten core/
-Fordner verschoben wurde. Natürlich wird im Verzeichnis modules/
empfohlen, um Module in benutzerdefinierte und Beitrag wie in Drupal 7 zu trennen.
Erstellen wir ein Modul namens Demo (sehr originell) und legen Sie es in das Verzeichnis modules/custom/
. Wie ich bereits erw?hnt habe, ben?tigen wir in diesem neu erstellten demo/
Ordner zuerst nur eine demo.info.yml
-Datei, die den folgenden erforderlichen Inhalt enth?lt:
name: Drupal 8 Demo module description: 'Demo module for Drupal 8 alpha11' type: module core: 8.x
Sie sollten mit drei der vier Schlüsselwertpaare (Name, Beschreibung und Kern) vertraut sein. Typ ist jetzt auch eine Anforderung, da Sie auch YML -Dateien für das Thema erstellen k?nnen. Eine weitere wichtige Sache ist, dass Leerzeichen in der YML-Datei sinnvoll sind und die richtige Eindrücke verwenden, um die Daten in eine Array-?hnliche Struktur zu organisieren.
Sie k?nnen diese Dokumentseite für zus?tzliche Schlüsselwertpaare anzeigen, die zur Modul-Datei .info.yml
hinzugefügt werden k?nnen, sowie Anweisungen zur Ankündigung von ?nderungen an diesem Format.
Es ist so, eine Datei. Sie k?nnen jetzt zur Seite der Erweiterungen navigieren, das Demo -Modul suchen und es aktivieren.
Wie ich bereits erw?hnt habe, müssen wir, bevor wir das Modul aktivieren, keine .module
Datei mehr erstellen. Architektonisch gesehen wird die Gr??e der .module
-Datei stark reduziert, da der gr??te Teil der Gesch?ftslogik in die Serviceklassen, Controller und Plugins verschoben wird, aber einige davon werden sp?ter sehen.
Was ist "Routing" und was passiert mit seinen Rückruffunktionen? hook_menu()
In Drupal 7 ist wahrscheinlich der am meisten implementierte Haken, da es verwendet wird, um die Pfade von Drupal zu definieren und diese Pfade mit der Rückruffunktion zu verbinden. Es ist auch für das Erstellen von Menülinks und vielen anderen Inhalten verantwortlich. hook_menu()
, da wir Symfony2 -Komponenten stark verwenden, um das Routing zu verarbeiten. Dies beinhaltet die Definition der Route als Konfiguration und die Verarbeitung der Rückruffunktion im Controller (eine Funktion der Controller -Klasse). Lassen Sie uns sehen, wie Sie dies tun, indem Sie eine einfache Seite erstellen, die klassische Hello World ausgibt! hook_menu()
für unser Modul erstellen. Diese Datei befindet sich im Modul -Root -Ordner (neben demo.routing.yml
). In dieser Datei k?nnen wir die folgende (einfache) Routendefinition haben: demo.info.yml
name: Drupal 8 Demo module description: 'Demo module for Drupal 8 alpha11' type: module core: 8.x
Die erste Zeile markiert den Beginn des Erstellens einer neuen Route namens Demo für die Moduldemo (der erste ist der Modulname und der zweite der Routenname). Unter Pfad geben wir den Pfad an, sich für diese Route zu registrieren. Unter Standardeinstellungen haben wir zwei Dinge: den Standard -Seitentitel (_title
) und _content
, auf die eine Funktion auf der Democontroller -Klasse verweist. Nach Anforderungen geben wir die Berechtigungen an, die der Benutzer haben muss, um die Seite anzuzeigen. Sie sollten diese Dokumentationsseite für weitere Optionen konsultieren, die diese Routing -Datei haben kann.
Erstellen wir jetzt unseren ersten Controller namens DemoController, der eine Funktion namens Demo () aufruft, wenn der Benutzer diese Seite anfordert.
Erstellen Sie im Modulverzeichnis einen Ordner namens SRC/ und erstellen Sie einen Ordner mit dem Namen Controller/ darin. Hier wird die Controller -Klasse gespeichert. Erstellen Sie weiterhin den ersten: Democontroller.php.
Der Controller und die anderen Klassen, die wir sp?ter im SRC/ Ordner sehen werden, sind Teil des PSR-4-Standards. Zun?chst mussten wir eine gr??ere Ordnerstruktur (PSR-0-Standard) erstellen, aber jetzt gibt es eine übergangsphase, in der beide funktionieren. Wenn Sie also den Code in einem Ordner namens LIB/ immer noch sehen, ist er PSR-0.
In unserer Democontroller.php -Datei k?nnen wir jetzt unsere Klasse deklarieren:
demo.demo: path: '/demo' defaults: _content: '\Drupal\demo\Controller\DemoController::demo' _title: 'Demo' requirements: _permission: 'access content'
Dies ist das einfachste und am wenigsten zu tun, um etwas auf der Seite anzuzeigen. Oben geben wir den Klassennamenspace an. Im Folgenden deklarieren wir die Klasse.
In der Democontroller -Klasse haben wir nur die Demo () -Funktion, die ein wiedergegebenes Array ?hnlich wie bei Drupal 7 zurückgibt. Es ist keine gro?e Sache. Alles, was wir jetzt tun müssen, ist den Cache zu l?schen und zum http://ipnx.cn/link/1a4a5f89e71e4bb9973355c964a950b4 Drupal Page mit Hallo Welt zu sehen.
Wo ist der Menülink?
In Drupal 7 k?nnen wir bei der Implementierung hook_menu()
den registrierten Pfad auch zum Menü hinzufügen, um den Menülink auf der Website anzuzeigen. Auch dies wird nicht mehr mit diesem Haken behandelt, sondern definiert den Menülink als Konfiguration mithilfe der YML -Datei.
Schauen wir uns an, wie Sie einen Menülink erstellen, der im Menü "verwaltete" Struktur "angezeigt wird. Zun?chst müssen wir eine Datei namens demo.menu_links.yml
im Stammverzeichnis des Moduls erstellen. In dieser YML -Datei definieren wir den Menülink und seinen Standort im vorhandenen Menü der Website. Um die von uns festgelegten Ziele zu erreichen, brauchen wir Folgendes:
<?php /** * @file * Contains \Drupal\demo\Controller\DemoController. */ namespace Drupal\demo\Controller; /** * DemoController. */ class DemoController { /** * Generates an example page. */ public function demo() { return array( '#markup' => t('Hello World!'), ); } }
Wir haben noch einmal eine einstiegbasierte YML-Struktur, in der wir zuerst den Maschinennamen (Demo) des Menülinks für die Modul-Demo definieren (wie wir es beim Routing getan haben). Als n?chstes haben wir den Link -Titel und die Beschreibung, gefolgt von dem übergeordneten Link (wo er platziert werden soll) und welche Route er verwenden sollte.
Der Wert vonübergeordnet ist der übergeordnete Menülink (das Modul anh?ngen). Um ihn zu finden, müssen Sie in der Datei *.menu_links.yml eingehen. Ich wei?, dass der "Struktur" -Link im Kernsystemmodul definiert ist. Durch die Betrachtung des Systems.
Route_Name ist der Name der Maschine der Route, die wir für diesen Link verwenden m?chten. Wir haben unsere schon einmal definiert. Damit k?nnen Sie den Cache l?schen und zum http://ipnx.cn/link/6c2665d7c3ed1e5bfd8ba600F026EB55 Demo/Path. Gut.
Schlussfolgerung
In diesem Artikel beginnen wir, die Entwicklung der Modul in Drupal 8 zu untersuchen. In dieser Phase (Alpha11 -Version) ist es an der Zeit, zu lernen, wie die neuen API- und Port -Beitragsmodule verwendet werden. Dazu schreibe ich meine Erkundung dieses neuen aufregenden Rahmens (Drupal 8), damit wir alle über diese ?nderungen erfahren und sofort in die Arbeit einsteigen k?nnen, wenn der Ver?ffentlichungstag ankommt.
Zuerst haben wir einige Grundlagen gelernt: So starten Sie das Drupal 8 -Modul (Dateien, Ordnerstrukturen usw.) und vergleichen es mit Drupal 7. Wir haben auch gelernt, wie man eine Route und eine Controller -Klasse definiert und wie man eine Funktion über diese Route aufruft. Schlie?lich sehen wir, wie Sie einen Menülink erstellen, der die von uns definierte Route verwendet.Im n?chsten Tutorial werden wir dieses Modul weiter erstellen und einige andere coole neue Funktionen kennenlernen, die Drupal 8 verwendet. Wir lernen, wie Sie Bl?cke erstellen und Formulare verwenden und das System konfigurieren. Wir sehen uns dann.
FAQs über den Bau von Drupal 8 Modulen (FAQ)
Was ist die Grundstruktur des Drupal 8 -Moduls?
Das Drupal 8 -Modul ist im Wesentlichen eine Reihe von Dateien, die bestimmte Funktionen enthalten und auf eine bestimmte Weise integriert. Die Grundstruktur enth?lt eine
-Datei (Bereitstellung von Metadaten über das Modul), eine .info.yml
-Datei (einschlie?lich PHP -Code) und andere optionale Dateien wie .module
, .css
, .js
usw. für Anh?ngenfunktion. .twig
Dateien sind obligatorisch, die den Namen, die Beschreibung, das Paket, den Typ, den Kern und die Abh?ngigkeiten des Moduls definieren. .info.yml
Das Routing -System in Drupal 8 ist für die Zuordnung der URL auf eine bestimmte Controller -Klasse verantwortlich. Es verwendet die Routing -Komponente von Symfony, die flexible und leistungsstarke Systeme erm?glicht. Das Routing -System verwendet die
-Datei, um Routen mit eindeutigen Namen, Pfaden, Standardwerten und Anforderungen zu definieren. Der Standardwert gibt normalerweise die Controller -Klasse an, die für die Bearbeitung der Anfrage verantwortlich ist. routing.yml
Erstellen einer benutzerdefinierten Seite in Drupal 8 beinhaltet das Definieren von Routen und Controllern. Die Route ist in der Datei
definiert und ordnet die URL an den Controller ab. Der Controller ist eine PHP -Klasse, die ein gerendertes Array für den Seiteninhalt zurückgibt. Die Controller -Klasse sollte im Verzeichnis routing.yml
des Moduls platziert werden. src/Controller
Wie füge ich meiner Drupal 8 benutzerdefinierten Seite einen Menülink hinzu?
Hinzufügen eines Menülinks zu Ihrer benutzerdefinierten Seite beinhaltet das Erstellen einer links.menu.yml
-Datei in Ihrem Modul. Diese Datei definiert einen Menülink, dessen Eigenschaften Titel, Beschreibung, Eltern, Routennamen und Gewicht enthalten. Der Routename sollte mit dem in der routing.yml
-Fatei definierten Routennamen übereinstimmen.
Wie erstelle ich eine Form in Drupal 8?
Erstellen einer Form in Drupal 8 beinhaltet das Erstellen einer Formklasse, die die FormBase
-Klasse erweitert und FormInterface
implementiert. Diese Klasse definiert Formularelemente, Validierung und Einreichungsverarbeitung. Das Formular kann angezeigt werden, indem es vom Controller zurückgegeben wird.
Wie erstelle ich Bl?cke in Drupal 8?
Erstellen eines Blocks in Drupal 8 beinhaltet das Erstellen einer Blockklasse, die die BlockBase
-Klasse erweitert. Diese Klasse definiert Blockinhalte und andere Eigenschaften. Bl?cke k?nnen über die Block -Layout -Schnittstelle auf der Seite platziert werden.
Wie erstelle ich ein Konfigurationsformular in Drupal 8?
Erstellen eines Konfigurationsformulars beinhaltet das Erstellen einer Formularklasse, die die ConfigFormBase
-Klasse erweitert und FormInterface
implementiert. Diese Klasse definiert Formularelemente und behandelt den Speicher und das Laden von Konfigurationsdaten.
Wie erstelle ich eine Administratorseite in Drupal 8?
Erstellen einer administrativen Seite beinhaltet das Definieren einer Route unter /admin
und einen Controller, der den Seiteninhalt zurückgibt. Seiten k?nnen zum Admin -Menü hinzugefügt werden, indem ein Menülink mit einem Elternteil unter system.admin
definiert wird.
Wie erstelle ich ein Thema in Drupal 8?
Erstellen eines Themas in Drupal 8 beinhaltet das Erstellen einer .info.yml
-Datei, die den Namen, die Beschreibung, den Typ, den Kern und die grundlegenden Themen definiert. Andere .twig
, .css
und .js
Dateien k?nnen hinzugefügt werden, um Themen für jedes Element festzulegen.
Wie erstelle ich einen benutzerdefinierten Feldtyp in Drupal 8?
Erstellen eines benutzerdefinierten Feldtyps beinhaltet das Erstellen einer Feldtypklasse, die die FieldTypePluginBase
-Klasse erweitert. Diese Klasse definiert Feldeigenschaften und -methoden zum Speichern, Anzeigen und Form der Verarbeitung. Feldtypen k?nnen für Inhaltstypen, Benutzer, Kommentare und andere Unternehmen verwendet werden.
Das obige ist der detaillierte Inhalt vonErstellen Sie ein Drupal 8 -Modul: Routing, Controller und Menü -Links. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

H?ufige Probleme und L?sungen für den variablen PHP -Umfang umfassen: 1. Die globale Variable kann innerhalb der Funktion nicht zugegriffen werden, und sie muss bei der Verwendung des globalen Schlüsselworts oder Parameters übergeben werden. 2. Die statische Variable wird statisch deklariert und nur einmal initialisiert und der Wert wird zwischen mehreren Aufrufen beibehalten. 3.. Hyperglobale Variablen wie $ _get und $ _post k?nnen direkt in jedem Bereich verwendet werden, aber Sie müssen auf eine sichere Filterung achten. 4. Die anonymen Funktionen müssen über das Schlüsselwort verwenden, und wenn Sie externe Variablen ?ndern, müssen Sie eine Referenz übergeben. Das Beherrschen dieser Regeln kann dazu beitragen, Fehler zu vermeiden und die Code -Stabilit?t zu verbessern.

Um PHP -Datei -Uploads sicher zu verarbeiten, müssen Sie die Quelle und die Type und die Eingabe des Dateinamens und des Pfades überprüfen, Serverbeschr?nkungen festlegen und Mediendateien zweimal verarbeiten. 1. überprüfen Sie die Upload -Quelle, um CSRF durch Token zu verhindern, und erkennen Sie den realen MIME -Typ über die Finfo_file mithilfe der Whitelist -Steuerung. 2. Benennen Sie die Datei in eine zuf?llige Zeichenfolge um und bestimmen Sie die Erweiterung, um sie gem?? dem Erkennungstyp in einem Verzeichnis ohne Web zu speichern. 3. Die PHP -Konfiguration begrenzt die Hochladengr??e und das tempor?re Verzeichnis Nginx/Apache verbietet den Zugriff auf das Upload -Verzeichnis. 4. Die GD -Bibliothek stellt die Bilder neu, um potenzielle b?swillige Daten zu l?schen.

Es gibt drei g?ngige Methoden für den PHP -Kommentarcode: 1. Verwenden Sie // oder #, um eine Codezeile zu blockieren, und es wird empfohlen, // zu verwenden. 2. Verwenden Sie /.../, um Codebl?cke mit mehreren Zeilen zu wickeln, die nicht verschachtelt werden k?nnen, aber gekreuzt werden k?nnen. 3.. Kombinationskenntnisse Kommentare wie die Verwendung / if () {} / Um Logikbl?cke zu steuern oder um die Effizienz mit Editor -Verknüpfungsschlüssel zu verbessern, sollten Sie auf die Schlie?ung von Symbolen achten und das Verschachteln bei der Verwendung vermeiden.

AgneeratorinphpiSamemory-effizientes WaytoiterateOverlargedatasetsByyieldingValueatimeinsteadofReturningThemallatonce.1.GeneratorsusetheyieldKeywordtoproduktenvaluesonDemand, ReducingMemoryUsage.2.TheyareusefulforfulforfulfordlingBiglopploups, Lesebiglochen, Leselungen, Lesebigs, Leselung, oder

Der Schlüssel zum Schreiben von PHP -Kommentaren liegt in der Kl?rung des Zwecks und der Spezifikationen. Kommentare sollten "Warum" und nicht "was getan" erkl?ren, um Redundanz oder zu Einfachheit zu vermeiden. 1. Verwenden Sie ein einheitliches Format wie Docblock (/*/) für Klassen- und Methodenbeschreibungen, um die Lesbarkeit und die Kompatibilit?t der Werkzeuge zu verbessern. 2. Betonen Sie die Gründe für die Logik, z. B. warum JS -Sprünge manuell ausgeben müssen. 3. Fügen Sie eine übersichtsbeschreibung vor komplexem Code hinzu, beschreiben Sie den Prozess in Schritten und helfen Sie, die Gesamtidee zu verstehen. V. Gute Anmerkungen k?nnen die Kommunikationskosten senken und die Effizienz der Code -Wartung verbessern.

In PHP k?nnen Sie quadratische Klammern oder lockige Klammern verwenden, um Zeichenfolgenspezifikationsspezifische Indexzeichen zu erhalten, aber quadratische Klammern werden empfohlen. Der Index startet von 0 und der Zugriff au?erhalb des Bereichs gibt einen Nullwert zurück und kann keinen Wert zugewiesen; MB_SUBSTR ist erforderlich, um Multi-Byte-Zeichen zu verarbeiten. Zum Beispiel: $ str = "Hallo"; echo $ str [0]; Ausgabe H; und chinesische Zeichen wie Mb_Substr ($ str, 1,1) müssen das richtige Ergebnis erzielen. In den tats?chlichen Anwendungen sollte die L?nge der Zeichenfolge vor dem Schleifen überprüft werden, dynamische Zeichenfolgen müssen für die Gültigkeit verifiziert werden, und mehrsprachige Projekte empfehlen, Multi-Byte-Sicherheitsfunktionen einheitlich zu verwenden.

Toinstallphpquickly, usexampponwindowsorhomebrewonmacos.1.onwindows, download undInstallxampp, SelectComponents, Startapache und PlaceFilesinhtdocscs.2.Anternativ, manuellinstallphpfrfr

Tolearnphpeffectival, startbysettingupalocalerverenVironmentusexs -LikexamppandacodeeditorikevScode.1) InstallxamppForapache, MySQL und Php.SeacodeeditorForsyntaxSupport.3) testyourscludingveliktingveliktelaThbiliodble.Neclyble.NektFile
