创建控制器
创建控制器
我们的留言簿项目已经在生产服务器上,但我们欺骗了一点。这个项目还没有任何网页。主页就像一个无聊的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 /控制器/
目录中。生成的类由一些样板代码组成,可以进行微调:
的#[路由('/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+ $问候