Skip to main content

大局观

10 分钟内开始使用 Symfony!真的吗!这就是您理解最重要的概念并开始构建真正的项目所需的全部内容!

如果您以前使用过 Web 框架,那么您应该对 Symfony 感到很熟悉。如果没有,欢迎使用一种全新的 Web 应用程序开发方式。 Symfony拥抱最佳实践,保持向后兼容性(是的!升级总是安全且简单的!)并提供长期支持。

下载 Symfony

首先,确保您已安装Composer并拥有 PHP 8.1 或更高版本。

准备好?在终端中,运行:

composer create-project symfony/skeleton quick_tour

这将创建一个新的quick_tour/目录,其中包含一个小而强大的新 Symfony 应用程序:

quick_tour/
├─ .env
├─ bin/console
├─ composer.json
├─ composer.lock
├─ config/
├─ public/index.php
├─ src/
├─ symfony.lock
├─ var/
└─ vendor/

我们可以在浏览器中加载该项目吗?是的!您可以设置Nginx 或 Apache并将其文档根配置为public/目录。但是,对于开发来说,最好安装 Symfony 本地 Web 服务器并按如下方式运行:

symfony server:start

在浏览器中访问http://localhost:8000来尝试您的新应用程序!

基础知识:路由、控制器、响应

我们的项目只有大约 15 个文件,但它已准备好成为一个时尚的 API、一个强大的 Web 应用程序或一个微服务。 Symfony 从小处开始,但随着您的扩展而扩展。

但在我们深入之前,让我们通过构建我们的第一个页面来深入了解基础知识。

在src/Controller中,创建一个新的DefaultController类并在其中创建一个index方法:

// src/Controller/DefaultController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;

class DefaultController
{
    #[Route('/', name: 'index')]
    public function index(): Response
    {
        return new Response('Hello!');
    }
}

就是这样!尝试访问主页: http://localhost:8000/ 。 Symfony 发现 URL 与我们的路由匹配,然后执行新的index()方法。

控制器只是一个普通函数,有一个规则:它必须返回一个 Symfony Response对象。但该响应可以包含任何内容:简单文本、JSON 或完整的 HTML 页面。

但路由系统要强大得多。所以让我们让这条路线变得更有趣:

// src/Controller/DefaultController.php
  namespace App\Controller;

  use Symfony\Component\HttpFoundation\Response;
  use Symfony\Component\Routing\Attribute\Route;

  class DefaultController
  {
-     #[Route('/', name: 'index')]
+     #[Route('/hello/{name}', name: 'index')]
      public function index(): Response
      {
          return new Response('Hello!');
      }
  }

此页面的 URL 已更改:现在是/hello/* : {name}的作用就像匹配任何内容的通配符。而且它会变得更好!也更新控制器:

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

  use Symfony\Component\HttpFoundation\Response;
  use Symfony\Component\Routing\Attribute\Route;

  class DefaultController
  {
      #[Route('/hello/{name}', name: 'index')]
-     public function index()
+     public function index(string $name): Response
      {
-         return new Response('Hello!');
+         return new Response("Hello $name!");
      }
  }

通过转至尝试该页面 http://localhost:8000/hello/Symfony 。您应该看到:Hello Symfony! URL 中的{name}值可作为控制器中的$name参数使用。

但是通过使用属性,路由和控制器就彼此相邻。需要另一页吗?在DefaultController中添加另一个路由和方法:

// src/Controller/DefaultController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;

class DefaultController
{
    // ...

    #[Route('/simplicity', methods: ['GET'])]
    public function simple(): Response
    {
        return new Response('Simple! Easy! Great!');
    }
}

路由还可以做更多的事情,但我们下次再说吧!现在,我们的应用程序需要更多功能!比如模板引擎、日志记录、调试工具等等。