创建一个控制器

创建一个控制器

我们的留言板项目已经生活在生产服务器但我们骗了一点。这个项目没有任何web页面。主页是担任一个无聊的404错误页面。让我们解决这个问题。

当一个HTTP请求,喜欢主页(http://localhost: 8000 /),S欧宝娱乐app下载地址ymfony试图找到一个路线相匹配的请求路径(/这里)。一个路线请求路径和之间的联系吗PHP调用,一个函数创建HTTP响应的请求。

这些调用被称为“控制器”。在Sy欧宝娱乐app下载地址mfony中,大多数控制器作为PHP类实现。你可以手动创建这样一个类,但因为我们喜欢去快,让我们看看Symfony可以帮助我们。欧宝娱乐app下载地址

懒惰与制造商包

生成控制器毫不费力地,我们可以使用欧宝娱乐app下载地址symfony / maker-bundle包,它已经安装的一部分webapp包中。

制造商包可以帮助你产生很多不同的类。在这本书中,我们将使用它所有的时间。每个“发电机”中定义一个命令和命令的一部分使命令名称空间。

Symf欧宝娱乐app下载地址ony控制台内置列表一个给定的名称空间下命令列出所有可用的命令;用它来发现所有发电机制造商提供的包:

1
美元欧宝娱乐app下载地址symfony控制台使列表

选择一个配置格式

创建的第一个控制器项目之前,我们需要决定我们想要使用的配置格式。欧宝娱乐app下载地址Symfony支持YAML、XML、PHP和PHP的属性。

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

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

您可能想知道如何猜你需要安装的软件包名称功能?大多数时候,你不需要知道。在许多情况下,Symfony包欧宝娱乐app下载地址含包安装的错误消息。运行欧宝娱乐app下载地址symfony控制台:消息没有信使包例如会结束,包含一个异常提示安装正确的包。

生成一个控制器

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

1
美元欧宝娱乐app下载地址ConferenceController symfony控制台:控制器

命令创建一个ConferenceController类下src /控制器/目录中。生成的类包含一些样板代码准备调整:

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

#(路线(“/会议”,名字:“会议”))属性的index ()方法一个控制器(旁边的配置代码配置)。

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

调整路线,使其匹配的主页:

1 2 3 4 5 6 7 8 9 10 11
- - - / src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ 8 7 + 8 7 @@使用Sym欧宝娱乐app下载地址fony \组件\路由\注释\路线;类ConferenceController延伸AbstractController {- #[路线(“/会议”,名字:“app_conference”))+ #[路线(“/”,名字:“主页”))公共函数指数():响应{返回$ this - >渲染(会议/ index . html。嫩枝”,(

这条路线的名字当我们想参考主页会有用的代码。而不是硬编码/路径,我们将使用名称的路线。

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

1 2 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 @@类ConferenceController延伸AbstractController #(路线(“/”,名字:“主页”)]公共函数指数():反应{-返回$ this - >渲染(会议/ index . html。嫩枝”,(——“controller_name”= >“ConferenceController”,-]);+新响应(< < <返回EOF+ < html >+ <身体>+ < img src = " /图片/在建。gif " / >身体+ < / >+ < / html >+ EOF+);}}

刷新浏览器:

/

一个控制器的主要责任是返回一个HTTP响应的请求。

其余的章节是关于我们不会保持的代码,让我们提交更改:

1 2
美元git添加。美元git commit - m“添加索引控制器”

添加一个复活节彩蛋

演示一个可以利用的信息请求的响应,让我们添加一个小的复活节彩蛋。每当主页包含一个查询字符串你好=法比安,让我们添加一些文本来迎接的人:

1 2 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.php24 @@ @@ 3、17 + 3名称空间的应用程序\控制器;控制器使欧宝娱乐app下载地址用Symfony \包\ FrameworkBundle \ \ AbstractController;+使用Sy欧宝娱乐app下载地址mfony \ HttpFoundation \ \组件请求;组件使用欧宝娱乐app下载地址Symfony \ \ HttpFoundation \反应;使用Sy欧宝娱乐app下载地址mfony \组件\路由\注释\路线;类ConferenceController延伸AbstractController{#[路线(“/”,名字:“主页”))公共函数指数():反应+公共函数指数(请求请求美元):反应{+ $迎接=”;+如果($ name = $请求- >查询- >获取('你好')){+ $迎接= sprintf (“< h1 > % s你好!< / h1 >”, htmlspecialchars函数(名字)美元);+}+新的响应(< < <返回EOF < html > <身体>+ $问候< img src = " /图片/在建。gif " / > < /身体> < / html >

欧宝娱乐app下载地址通过一个Symfony公开请求数据请求对象。当Symf欧宝娱乐app下载地址ony看到这个type-hint控制器参数,它会自动知道将它传递给你。我们可以使用它来得到的的名字从查询字符串和添加一个条目<标题>标题。

试着打/然后/ ?你好=法比安在浏览器中看到的不同。

请注意

注意到电话htmlspecialchars函数()为了避免XSS的问题。这是当我们将自动完成切换到一个合适的模板引擎。

我们也可以让这个名字URL的一部分:

1 2 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 @@使用Sym欧宝娱乐app下载地址fony \组件\路由\注释\路线;类ConferenceController延伸AbstractController {- #[路线(“/”,名字:“主页”))公共函数指数(请求美元请求):反应+ #[路线(“/ hello /{名称}”,名字:“主页”))+公共函数指数(string name = "):美元的回应{$ = "打招呼;——如果($ name = $请求- >查询- >获取('你好')){+如果(美元的名字){$迎接= sprintf (“< h1 > % s你好!< / h1 >”, htmlspecialchars函数(名字)美元);}

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

回复我们刚刚做出的更改:

1
美元git checkout src /控制器/ ConferenceController.php
1 2
美元src /控制器/ ConferenceController.php git重置头美元git checkout src /控制器/ ConferenceController.php

调试变量

一个伟大的调试助手是Symfony欧宝娱乐app下载地址dump ()函数。它总是可用的,允许你将复杂的变量在一个漂亮的和交互式的格式。

临时的变化src /控制器/ ConferenceController.php将请求对象:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
- - - / src /控制器/ ConferenceController.php+ + + b / src /控制器/ ConferenceController.php17 @@ @@ 3 14 + 3名称空间的应用程序\控制器;控制器使欧宝娱乐app下载地址用Symfony \包\ FrameworkBundle \ \ AbstractController;+使用Sy欧宝娱乐app下载地址mfony \ HttpFoundation \ \组件请求;组件使用欧宝娱乐app下载地址Symfony \ \ HttpFoundation \反应;使用Sy欧宝娱乐app下载地址mfony \组件\路由\注释\路线;类ConferenceController延伸AbstractController{#[路线(“/”,名字:“主页”))公共函数指数():反应+公共函数指数(请求请求美元):反应{美元+转储(请求);+新的响应(< < <返回EOF < html > <身体>

在刷新页面时,注意到新的工具栏“目标”图标;它允许您检查转储。点击它来访问一个完整的页面,导航是由简单:

/

回复我们刚刚做出的更改:

1
美元git checkout src /控制器/ ConferenceController.php
1 2
美元src /控制器/ ConferenceController.php git重置头美元git checkout src /控制器/ ConferenceController.php
这项工作,包括代码示例,许可下Creative Commons BY-NC-SA 4.0许可证。