# 在 Symfony 中创建您的首页 创建新页面(无论是 HTML 页面还是 JSON 端点)是一个两步过程: * 创建控制器:控制器是您编写的用于构建页面的 PHP 函数。您获取传入的请求信息并使用它来创建 Symfony Response对象,该对象可以保存 HTML 内容、JSON 字符串甚至图像或 PDF 等二进制文件; * 创建路由:路由是页面的 URL(例如/about )并指向控制器。 #### 创建页面:路由和控制器 假设您要创建一个页面 - /lucky/number - 生成一个幸运(好吧,随机)数字并打印它。为此,请创建一个“控制器”类并在其中创建一个“控制器”方法: ``` Lucky number: '.$number.'' ); } } ``` 现在您需要将此控制器函数与公共 URL(例如/lucky/number )相关联,以便在用户浏览到它时调用number()方法。此关联是使用#[Route]属性定义的(在 PHP 中,属性用于将元数据添加到代码中): ``` // src/Controller/LuckyController.php // ... + use Symfony\Component\Routing\Attribute\Route; class LuckyController { + #[Route('/lucky/number')] public function number(): Response { // this looks exactly the same } } ``` 就是这样!如果您使用Symfony Web 服务器,请访问: http://localhost:8000/lucky/number进行尝试 如果您看到幸运数字被打印回给您,那么恭喜您!但在你跑去玩彩票之前,先看看它是如何运作的。还记得创建页面的两个步骤吗? * 创建一个控制器和一个方法:这是一个构建页面并最终返回Response对象的函数。您将在控制器自己的部分中了解有关控制器的更多信息,包括如何返回 JSON 响应; * 创建路由:在config/routes.yaml中,路由定义页面的 URL( path )以及要调用的controller 。您将在其自己的部分中了解有关路由的更多信息,包括如何创建可变URL。 #### bin/console 命令 您的项目内部已经有一个强大的调试工具: bin/console命令。尝试运行它: ``` php bin/console ``` 您应该会看到一个命令列表,这些命令可以为您提供调试信息、帮助生成代码、生成数据库迁移等等。当您安装更多软件包时,您将看到更多命令。 要获取系统中所有路由的列表,请使用debug:router命令: ``` php bin/console debug:router ``` 您应该在列表中看到您的app_lucky_number路线: ``` ---------------- ------- ------- ----- -------------- Name Method Scheme Host Path ---------------- ------- ------- ----- -------------- app_lucky_number ANY ANY ANY /lucky/number ---------------- ------- ------- ----- -------------- ``` 除了app_lucky_number之外,您还将看到调试路由——下一节将详细介绍调试路由。 当您继续学习时,您将了解更多命令! #### Web 调试工具栏:梦想调试工具 Symfony令人惊叹的功能之一是 Web 调试工具栏:在开发时,该工具栏会在页面底部显示大量调试信息。这一切都通过名为symfony/profiler-pack的Symfony 包开箱即用。 您将在页面底部看到一个黑条。您将在此过程中了解有关它所包含的所有信息的更多信息,但请随意尝试:将鼠标悬停在不同的图标上并单击不同的图标以获取有关路由、性能、日志记录等的信息。 #### 渲染模板 如果您从控制器返回 HTML,您可能需要呈现一个模板。幸运的是,Symfony 附带了Twig :一种最小、强大且实际上非常有趣的模板语言。 安装 twig 包: ``` composer require twig ``` 确保LuckyController扩展了 Symfony 的AbstractController基类: ``` // src/Controller/LuckyController.php // ... + use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; - class LuckyController + class LuckyController extends AbstractController { // ... } ``` 现在,使用方便的render()方法来渲染模板。向其传递一个number变量,以便您可以在 Twig 中使用它: ``` // src/Controller/LuckyController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; // ... class LuckyController extends AbstractController { #[Route('/lucky/number')] public function number(): Response { $number = random_int(0, 100); return $this->render('lucky/number.html.twig', [ 'number' => $number, ]); } } ``` 模板文件位于templates/目录中,该目录是在您安装 Twig 时自动创建的。创建一个新的templates/lucky目录,其中包含新的number.html.twig文件: ``` {# templates/lucky/number.html.twig #}

Your lucky number is {{ number }}

``` {{ number }}语法用于在 Twig 中打印变量。刷新您的浏览器即可获得新的幸运数字! 现在您可能想知道 Web 调试工具栏去了哪里:那是因为当前模板中没有标记。您可以自己添加 body 元素,或扩展base.html.twig ,其中包含所有默认 HTML 元素。 在模板文章中,您将了解有关 Twig 的所有信息:如何循环、渲染其他模板以及利用其强大的布局继承系统。 #### 检查项目结构 好消息!您已经在项目中最重要的目录中工作过: * config/ 包含...配置!您将配置路由、服务和包。 * src/ 所有您的 PHP 代码都存放在这里。 * templates/ 所有您的 Twig 模板都存放在这里。 大多数时候,你将在 src/ 、 templates/ 或 config/ 中工作。随着你继续阅读,你会了解每个区域可以做什么。 那么项目中的其他目录怎么办? * bin/ 著名的 bin/console 文件存放在这里(以及其他不太重要的可执行文件)。 * var/ 这是自动创建的文件存储的地方,例如缓存文件( var/cache/ )和日志( var/log/ )。 * vendor/ 第三方(即“供应商”)库在这里!这些是通过 Composer 包管理器下载的。 * public/ 这是您项目的文档根目录:您可以将任何公开访问的文件放在这里。 当您安装新包时,需要时将自动创建新目录。