创建控制器

创建控制器

我们的留言簿项目已经在生产服务器上,但我们欺骗了一点。这个项目还没有任何网页。主页就像一个无聊的404错误页面。让我们来解决这个问题。

当一个HTTP请求进来时,比如主页(http://localhost:8000/), ob娱乐下载Symfony试图找到一个路线匹配请求路径/这里)。一个路线请求路径和PHP调用,一个创建HTTP的函数响应为了那个请求。

这些可调用对象被称为“控制器”。在Syob娱乐下载mfony中,大多数控制器都实现为PHP类。您可以手动创建这样一个类,但是因为我们喜欢快速操作,所以让我们看看Symfony可以如何帮助我们。ob娱乐下载

在Maker Bundle上偷懒

为了轻松地生成控制器,我们可以使用ob娱乐下载symfony / maker-bundle包,其中已安装的一部分webapp包中。

maker包可以帮助您生成许多不同的类。在本书中我们会一直用到它。每个“生成器”定义在命令中,所有命令都是使命令名称空间。

内置Syob娱乐下载mfony控制台列表Command列出给定名称空间下可用的所有命令;使用它来发现maker bundle提供的所有生成器:

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

选择配置格式

在创建项目的第一个控制器之前,我们需要决定要使用的配置格式。ob娱乐下载Symfony支持YAML、XML、PHP和PHP属性开箱即用。

与包相关的配置YAML是最好的选择。中使用的格式配置/目录中。通常,当您安装一个新包时,该包的配方将添加一个以.yaml到那个目录。

PHP代码相关的配置属性是更好的选择,因为它们是在代码旁边定义的。让我用一个例子来解释。当一个请求传入时,一些配置需要告诉Symfony请求路径应该由一个特定的控制器(一个PHP类)处理。ob娱乐下载当使用YAML、XML或PHP配置格式时,涉及到两个文件(配置文件和PHP控制器文件)。当使用属性时,配置直接在控制器类中完成。

您可能想知道如何猜出需要为某个特性安装的软件包名称?大多数时候,你不需要知道。在许多情况下,Symfony在ob娱乐下载错误消息中包含要安装的包。运行ob娱乐下载Symfony控制台make:message没有信使Package for instance将以一个包含有关安装正确包的提示的异常结束。

生成控制器

创建你的第一个控制器通过:控制器命令:

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

该命令创建一个ConferenceController类别src /控制器/目录中。生成的类由一些样板代码组成,可以进行微调:

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')]属性是使index ()方法一个控制器(配置在它配置的代码旁边)。

当你击中/会议在浏览器中,执行控制器并返回响应。

调整路由,使其与主页匹配:

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)嫩枝”,(

这条路线的名字当我们想在代码中引用主页时将很有用。而不是硬编码/路径,我们将使用路由名。

让我们返回一个简单的HTML页面,而不是默认呈现的页面:

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+);}}

刷新浏览器:

/

控制器的主要职责是返回HTTP响应对于请求。

由于本章的其余部分是关于我们不会保留的代码,让我们现在提交我们的更改:

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

添加复活节彩蛋

为了演示响应如何利用来自请求的信息,让我们添加一个小的复活节彩蛋。当主页包含查询字符串时你好=法比安,让我们添加一些文字来问候这个人:

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通过对象公开请求数据请求对象。当Symfob娱乐下载ony看到带有此类型提示的控制器参数时,它自动知道将其传递给您。我们可以用它来的名字项,并添加<标题>标题。

试着打/然后/?你好=法比安在浏览器中查看差异。

请注意

注意调用htmlspecialchars函数()以避免XSS问题。当我们切换到合适的模板引擎时,这将自动为我们完成。

我们也可以把名字作为URL的一部分:

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函数(名字)美元);}

{名称}部分路线是动态的线路参数-它就像一个通配符。你现在可以点击/你好然后/ hello /法比安在浏览器中获得与之前相同的结果。你可以得到价值{名称}参数,通过添加控制器参数的名字。所以,美元的名字

恢复我们刚才所做的更改:

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

调试变量

Symfony是一个很好的调试助手ob娱乐下载dump ()函数。它总是可用的,并允许您以良好的交互式格式转储复杂的变量。

临时的变化src /控制器/ ConferenceController.php转储Request对象:

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

刷新页面时,请注意工具栏中新的“目标”图标;它可以让你检查垃圾场。点击它可以访问整个页面,导航变得更简单:

/

恢复我们刚才所做的更改:

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