跳到内容

概览

编辑此页

10 分钟开始使用 Symfony!真的!这就是你理解最重要的概念并开始构建真实项目所需的一切!

如果你之前使用过 Web 框架,你会发现 Symfony 非常熟悉。 如果没有,欢迎来到开发 Web 应用程序的全新方式。 Symfony *拥抱* 最佳实践,保持向后兼容性(是的!升级始终安全且容易!),并提供长期支持。

下载 Symfony

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

准备好了吗?在终端中,运行

1
$ composer create-project symfony/skeleton quick_tour

这会创建一个新的 quick_tour/ 目录,其中包含一个小型但功能强大的新 Symfony 应用程序

1
2
3
4
5
6
7
8
9
10
11
quick_tour/
├─ .env
├─ bin/console
├─ composer.json
├─ composer.lock
├─ config/
├─ public/index.php
├─ src/
├─ symfony.lock
├─ var/
└─ vendor/

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

1
$ symfony server:start

在浏览器中访问 https://127.0.0.1:8000 来试用你的新应用!

The default Symfony welcome page.

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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!');
    }
}

就这样!尝试访问主页: https://127.0.0.1:8000/ 。 Symfony 看到 URL 与我们的路由匹配,然后执行新的 index() 方法。

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

但是路由系统*非常*强大。 因此,让我们使路由更有趣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 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} 就像一个通配符,可以匹配任何内容。 而且它变得更好了!也更新控制器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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!");
      }
  }

通过访问 https://127.0.0.1:8000/hello/Symfony 试用该页面。 你应该看到:Hello Symfony! URL 中 {name} 的值作为控制器中的 $name 参数可用。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 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!');
    }
}

路由可以做 *更多*,但我们稍后再说!现在,我们的应用程序需要更多功能!例如模板引擎、日志记录、调试工具等等。

继续阅读“ Flex: 组合你的应用程序 ”。

这项工作,包括代码示例,均根据 Creative Commons BY-SA 3.0 许可证获得许可。
目录
    版本