symfony 6.4 推荐用 php 属性 #[route] 定义路由,需启用 attribute 类型加载器;也支持 yaml 集中配置和 php 文件动态生成,三者均需注意缓存清理与语法规范。

在 Symfony 6.4 中创建路由,就是把一个 URL 地址(比如 /admin/users)准确对应到某个控制器方法上,让访问该地址时能执行你写的逻辑并返回响应。这一步不做对,用户打开网页就会看到 404 错误。
用 PHP 属性注解定义路由(推荐)
这是 Symfony 6.4 官方主推的方式,代码即文档,改路由不用跳转配置文件,直接在控制器里写。
第一步:确认项目已启用属性路由加载。打开 config/routes.yaml,确保包含以下内容:
controllers:<br> resource: ../../src/Controller/<br> type: attribute
第二步:在控制器方法上方添加 [Route] 属性。例如,在 src/Controller/HomeController.php 的 index() 方法前加:
#[Route('/home', name: 'home_index')]
第三步:保存后清空缓存,否则新路由不会生效:php bin/console cache:clear
注意:Symfony 6.4 默认禁用旧式注解(@Route),必须用 PHP 8+ 的属性语法 #[Route(...)],写成 @Route 会报错且不被识别。
用 YAML 文件集中定义路由
适合需要统一管理、多环境差异化配置,或团队约定“路由不写进控制器”的场景。
在 config/routes.yaml 里直接写:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
blog_list:<br> path: /blog<br> controller: App\Controller\BlogController::list<br> methods: [GET]
其中 blog_list 是路由名称,path 是访问路径,controller 必须写成完整类名加双冒号加方法名的格式,不能省略 App\Controller\ 前缀。
如果要传参数,比如 /blog/{id},就写成:
blog_show:<br> path: /blog/{id}<br> controller: App\Controller\BlogController::show<br> requirements:<br> id: '\d+'
【id 必须用单引号包裹正则表达式,否则 YAML 解析会失败】
用 PHP 文件动态生成路由
适用于路由数量极大、需根据数据库或外部配置实时生成的情况,比如多租户后台或 CMS 页面路由。
新建 config/routes.php 文件,内容如下:
<?php <br>use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;<br><br>return function (RoutingConfigurator $routes) {<br> $routes->add('api_health', '/api/health')<br> ->controller([App\Controller\ApiController::class, 'health'])<br> ->methods(['GET']);<br>};
这个文件会被自动加载,无需额外注册——前提是 config/routes.yaml 中没有覆盖掉 PHP 加载器。
方法一和方法二都支持路由组前缀,但 PHP 方式更灵活:你可以用 foreach 循环批量注册,也能调用服务获取动态路径,而 YAML 和属性方式做不到这点。










