Skip to main content

在 Symfony 中创建您的首页

创建新页面(无论是 HTML 页面还是 JSON 端点)是一个两步过程:

  • 创建控制器:控制器是您编写的用于构建页面的 PHP 函数。您获取传入的请求信息并使用它来创建 Symfony Response对象,该对象可以保存 HTML 内容、JSON 字符串甚至图像或 PDF 等二进制文件;
  • 创建路由:路由是页面的 URL(例如/about )并指向控制器。

创建页面:路由和控制器

假设您要创建一个页面 - /lucky/number - 生成一个幸运(好吧,随机)数字并打印它。为此,请创建一个“控制器”类并在其中创建一个“控制器”方法:

<?php
// src/Controller/LuckyController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class LuckyController
{
    public function number(): Response
    {
        $number = random_int(0, 100);

        return new Response(
            '<html><body>Lucky number: '.$number.'</body></html>'
        );
    }
}

现在您需要将此控制器函数与公共 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 #}
<h1>Your lucky number is {{ number }}</h1>

{{ number }}语法用于在 Twig 中打印变量。刷新您的浏览器即可获得新的幸运数字!

现在您可能想知道 Web 调试工具栏去了哪里:那是因为当前模板中没有