首个 symfony 5.4.54 控制器需继承 abstractcontroller 并置于 src/controller/ 目录下,配合注解路由(如 #[route('/', name: 'app_home')])和自动服务注册机制,无需手动配置即可启用依赖注入与 render() 等快捷方法。

创建首个 Controller 在 Symfony 5.4.54 中非常直接,关键在于继承 AbstractController 并配合自动服务注册机制,无需手动配置服务。
控制器必须继承 AbstractController
这是启用依赖注入和快捷方法(如 render()、redirectToRoute())的前提。不继承该基类,控制器无法被容器识别为服务,参数注入会失败。
- 使用
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; - 类声明写成
class DefaultController extends AbstractController - 确保命名空间为
App\Controller(默认约定)
路由定义推荐用注解方式
Symfony 5.4 默认启用注解路由支持,比 YAML 更轻量、更贴近代码逻辑。
- 引入路由注解:
use Symfony\Component\Routing\Annotation\Route; - 在 action 方法上方添加:
#[Route('/hello', name: 'app_hello')] - 路径可带占位符,例如
#[Route('/user/{id}', name: 'app_user_show')]
让控制器自动注册为服务
只要满足两个条件,Symfony 就会自动将其注册并打上 controller.service_arguments 标签:
- 类位于
src/Controller/目录下 - 继承
AbstractController - 确认
config/services.yaml中保留默认控制器加载段(通常已存在):
services:
App\Controller\:
resource: '../src/Controller/'
tags: ['controller.service_arguments']
写一个最简可用的示例
新建 src/Controller/DefaultController.php:
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController extends AbstractController
{
#[Route('/', name: 'app_home')]
public function index(): Response
{
return $this->render('default/index.html.twig');
}
}
保存后访问 http://localhost:8000 即可看到响应。若模板不存在,会提示 Twig 错误——此时只需创建 templates/default/index.html.twig 即可。











