艾宁控制器

艾宁控制器

Unser Gästebuchprojekt ist bereits auf dem Server für den Produktivbetrieb live, aber wir haben ein wenig geschummelt: Das Projekt hat noch keine Webseiten。模具主页zeigt eine langweilige 404-Fehlerseite。Das wollen wir gleich korrigieren。

Wenn ein HTTP-Request (HTTP-Anfrage) eintrifft, wie z. B. für die主页(http://localhost:8000/), versucht ob娱乐下载Symfony, eine路线Zu finden, der demRequest-Pfadentspricht(这里/).风景明信片路线ist die verindung zwischen dem Request-Path (Anforderungspfad) und einemPHP调用- einer Funktion, die diehttp响应(HTTP-Antwort) für diesen请求erzeugt. exe。

Diese Callables werden als“控制器”bezeichnet。在Syob娱乐下载mfony sind die meisten Controller als PHP-Klassen implementiert。你能看见我的灵魂,我的灵魂,我的灵魂,我的灵魂。ob娱乐下载

错误的制造包

Um Controller mühelos zu generieren, können wir dasob娱乐下载symfony / maker-bundle-Paket nutzen, welches with themwebapp-Paket installiert wurde。

Das Maker-Bundle hilft Dir, viele verschiedene Klassen zu generieren。我们在一起,在一起,在一起。Jeder "Generator"是einem Befehl definert und alle Befehle sinind Teil des使-Befehl-Namespaces。

Der in Der ob娱乐下载Symfony-Console eingebaute列表-Befehl listet alle Befehle auf, die unter einem bestimmten Namespace verfügbar信德;verwende ihn,嗯alle vom Maker-Bundle bereitgestellten Generatoren zu ermitteln:

1
ob娱乐下载Symfony控制台列表制作

Ein konfigationsformat auswählen

以前的项目控制,müssen以前的项目控制,welches Konfigurationsformat。ob娱乐下载Symfony unterstützt YAML, XML, PHP和PHP-属性nativ。

毛死在Bezug auf Pakete配置坚持YAML死得最好,沃尔。格式,即时配置/Verzeichnis verwendet wild。Häufig, wenn Du ein neues Paket installierst, wid das Recipe dieses Pakets eine neue Datei mit der Endung in.yaml祖diesem Verzeichnis hinzufügen。

毛死php代码配置信德属性eine bessere Wahl, da sie nahe am Code hinterlegt sinind。Lass mich das an einem Beispiel erklären: Wenn eine Request eingeht, muss eine Konfiguration ob娱乐下载Symfony mitteilen, dass der Requestpfad von einem bestimmten Controller (einer PHP-Klasse) behandelt werden soll。byder Verwendung von YAML-, XML- oder php - konfigationsformaten sind zwei Dateien beteiligt (die konfigationsdatei和die PHP-Controller-Datei)。在控制器-克拉斯的配置指导下,用Verwendung von Attributen erfolgt die configuration direct。

Du fragst dich vielleicht, wie Du den Paketnamen erraten kannst, den Du für die安装eines bestimmten特征eingeben必须?Meistens must du es niht wissen。在维也纳Fällen enthält Symfonob娱乐下载y In seinen Fehlermeldungen das zu installierende Paket。Der Aufrufob娱乐下载symfony:消息ohne das信使-Paket zum Beispiel wäre mit einer Exception beendt worden, die einen Hinweis auf die Installation des richtigen Pakets enthält。

艾宁控制器erzeugen

Erstelle Deinen ersten控制器超级丹:控制器Befehl:

1
ob娱乐下载symfony控制台make:controller ConferenceController

“Befehl erstellt eine”ConferenceController-Klasse imsrc /控制器/-Verzeichnis。标准代码:jet angep助理werden kann

src /控制器/ ConferenceController.php
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
名称空间应用程序控制器使用ob娱乐下载FrameworkBundle控制器AbstractController使用ob娱乐下载组件HttpFoundation响应使用ob娱乐下载组件路由注释路线ConferenceController扩展AbstractController#[路由('/conference',名称:'conference')]公共函数指数()响应返回->呈现(“会议/ index.html.twig”, (“controller_name”= >“ConferenceController”]);}}

达斯#[路由('/conference',名称:'conference')]- attribute macht dieindex ()-Methode zu einem Controller (die Konfiguration befindet sich neben dem Code, den sie konfiguriert)。

Wenn Du在einem浏览器/会议aufrufst, bird der Controller ausgeführt und eine Response(蚁草)zurückgegeben。

Passe die Route an, damit sie mit der主页übereinstimmt:

1 2 3 4 5 6 7 8 9 10 11
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -8,7 +8,7使用Symfonob娱乐下载y\组件\路由\注释\路由;AbstractController类- #[路由('/conference',名称:'app_conference')]+ #[路由('/',名称:'主页')]公共函数index(): Response {return $this->render('conference/index.html. html. html. html. html)嫩枝”,(

Der的名字der Route wd nützlich sein, wenn wir die主页im Code referenzieren wollen。Anstatt/als Pfad anzugeben(硬编码),verwenden wir den Namen der Route。

Anstelle der standardmäßig gerenderten Seite geben wir einfache HTML-Seite zurück:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -11,8 +11,13 @@ class ConferenceController extends AbstractController #[路由('/',名称:'主页')]公共函数索引():Response {-返回$this->render('conference/index.html. html. render('conference/index.html. html)嫩枝”,(- 'controller_name' => 'ConferenceController',-]);+返回新的响应(<<+ < html >身体+ < >+ 身体+ < / >+ < / html >+ EOF+);}}

Aktualisiere den浏览器:

/

Die Hauptaufgabe eines控制器best darin, eine HTTP-响应für den请求zurückzugeben。

Da der letzte Teil dieses Kapitels über Code ist, den wir niht代表werden, lass ununser Änderungen committed。

1 2
Git添加。Git提交-m“添加索引控制器”

Ein复活节彩蛋hinzufügen

Um zu zeigen, wie eine响应信息audem请求nutzen kann, fügen wir ein kleines复活节彩蛋hinzu。Wann immer die首页einen查询字符串wie你好=法比安enthält, fügen wir einen文本hinzu,嗯死亡人祖begrüßen:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -3,17 +3,24 @@名称空间的应用程序\控制器;控制器使ob娱乐下载用Symfony \包\ FrameworkBundle \ \ AbstractController;+使用Syob娱乐下载mfony \ HttpFoundation \ \组件请求;组件使用ob娱乐下载Symfony \ \ HttpFoundation \反应;使用Syob娱乐下载mfony \组件\路由\注释\路线;类ConferenceController扩展AbstractController{#[路由('/',名称:'主页')]—public function index():表示响应+公共函数索引(Request $ Request):响应+ $greet = ";+ if ($name = $request->query->get('hello')) {+ $greet = sprintf('

Hello %s!< / h1 >”,htmlspecialchars函数(名字)美元);+}+返回新的响应(<< . txt+ $问候

ob娱乐下载Symfony stellt die Requestdaten über ein请求-Objekt zur Verfügung。Wenn ob娱乐下载Symfony ein Controller-Argument mit diesem Type-Hint sieht, weiß es automatisch, dass es das请求-Objekt übergeben soll。Wir können es verwenden,嗯das的名字-Element aus dem查询字符串zu holen and zu einem<标题>-Titel hinzu zufügen。

Versuche在einem Browser erst/和丹/?你好=法比安aufzurufen,嗯den Unterschied zu sehen。

请注意

Beachte den Aufruf zuhtmlspecialchars函数()xss,问题,祖vermeiden。Sobald wir zu einer richtigen模板-引擎wechseln, wid das automatisch für uns erledigt。

Wir hätten den Namen auch in die URL aufnehmen können:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -9,11 +9,11使用Symfonob娱乐下载y\组件\路由\注释\路由;AbstractController类- #[路由('/',名称:'主页')]- public函数索引(Request $ Request):响应+ #[路由('/hello/{name}', name: '主页')]+公共函数索引(string $name = "):响应{$greet = ";- if ($name = $request->query->get('hello')) {+ if ($name) {$greet = sprintf('

Hello %s!< / h1 >”,htmlspecialchars函数(名字)美元);}

Der{名称}-Teil der Route ist ein dynamischerRoutenparameter- er funktioniert wie ein Platzhalter。杜坎斯特修女/你好和丹/ hello /法比安在einem Browser eingeben,嗯die gleichen Ergebnisse wie zuvor zu erhalten。Du kannst den维尔特des{名称}-参数erhalten, indem Du einen控制器参数hinzufugst。同时,美元的名字

Mach die Änderungen, die wir gemacht haben, rückgängig:

1
src/Controller/ConferenceController.php
1 2
git重置HEAD src/Controller/ConferenceController.phpsrc/Controller/ConferenceController.php

调试Variablen

Symfob娱乐下载ony死去dump ()-Funktion ist ein großartiger Debug-Helfer。Er ist immer verfügbar und erlaubt Dir complex einem guten and interaktiven格式zu extieren的变量。

安德利果汁src /控制器/ ConferenceController.phpfür einen时刻对请求-客体的出口:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
——/ src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -3,14 +3,17 @@名称空间的应用程序\控制器;控制器使ob娱乐下载用Symfony \包\ FrameworkBundle \ \ AbstractController;+使用Syob娱乐下载mfony \ HttpFoundation \ \组件请求;组件使用ob娱乐下载Symfony \ \ HttpFoundation \反应;使用Syob娱乐下载mfony \组件\路由\注释\路线;类ConferenceController扩展AbstractController{#[路由('/',名称:'主页')]—public function index():表示响应+公共函数索引(Request $ Request):响应美元+转储(请求);+返回新的响应(<<  . txt

Wenn Du die Seite aktualisiert, siehst Du ein neues "Zielscheiben"-工具栏中的图标;damit kannst Du den出口审查。Wenn Du darauf klickst, hast Du Zugang zu einer ganzen Seite, wo es einfach ist durch zu navigatieren:

/

Mach die Änderungen, die wir gemacht haben, rückgängig:

1
src/Controller/ConferenceController.php
1 2
git重置HEAD src/Controller/ConferenceController.phpsrc/Controller/ConferenceController.php
此工作,包括代码示例,是根据知识共享协议BY-NC-SA 4.0许可证。