📜  Symfony-控制器(1)

📅  最后修改于: 2023-12-03 14:47:49.172000             🧑  作者: Mango

Symfony 控制器

控制器是任何 MVC 框架中的核心组件。在 Symfony 中,控制器作为中央处理器来处理传入的请求并作出响应。本文将介绍 Symfony 中的控制器及其用法。

安装

在使用 Symfony 控制器之前,必须先安装 Symfony。可以使用 Composer 安装:

composer create-project symfony/skeleton my_project_name

然后,可以通过运行以下命令来启动开发服务器并访问应用程序:

cd my_project_name
symfony serve
创建控制器

Symfony 的控制器通常存储在 src/Controller 目录中。要创建一个控制器,可以在该目录中创建一个新文件,并定义一个类,如下所示:

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

use Symfony\Component\HttpFoundation\Response;

class HelloController
{
    public function index()
    {
        return new Response("<html><body>Hello!</body></html>");
    }
}

该类包含一个名为 index() 的方法,它返回了一个包含 "Hello!" 文本的响应。这个方法的名字与路由中定义的路由名称相同。

控制器路由

在 Symfony 中,每个请求都必须由路由处理。可以在路由定义中指定控制器及其方法。下面是一个定义控制器路由的例子:

# config/routes.yaml
hello:
    path: /hello
    controller: App\Controller\HelloController::index

这个路由将捕获路径为 /hello 的所有请求,并调用 HelloController 类的 index() 方法。

一些更高级的路由定义可以在 Symfony 官方文档中找到。

依赖注入

Symfony 控制器支持依赖注入。例如,如果我们希望控制器接受一个实例化的服务,则可以将其作为参数传递给控制器构造函数,然后在方法中使用它。例如,如果我们有一个 UserService 类,其构造函数接受一个 EntityManagerInterface 作为参数,则可以在以下方式中注入:

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

use App\Service\UserService;
use Symfony\Component\HttpFoundation\Response;

class HelloController
{
    private $userService;
  
    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }

    public function index()
    {
        $users = $this->userService->getAll();

        return new Response("<html><body>".count($users)." users found!</body></html>");
    }
}

__construct() 方法中,我们注入了 UserService,并将其保存在 $userService 属性中。然后,在 index() 方法中,我们使用 $this->userService->getAll() 方法来获取所有用户。

结论

本文介绍了 Symfony 框架中的控制器及其用法。掌握这些基本的概念后,您可以开始构建自己的应用程序,并探索 Symfony 的许多其他功能和组件。