不行,frankenphp默认不识别symfony的public/index.php入口和路由配置,需通过frankenphp.yaml显式配置document_root、front_controller、enable_rewriting、rewrite规则及environment变量,并正确设置static_files才能正常运行。

直接用 FrankenPHP 启动 Symfony 项目行不行?
不行,FrankenPHP 本身不自动识别 Symfony 的 public/index.php 入口或路由配置,它默认只当普通 PHP 文件执行——这意味着你直接 frankenphp run 会 404 或抛出未定义 $request 的错误。必须显式配置“前端控制器”和请求上下文。
怎么配 frankenphp.yaml 让 Symfony 路由生效?
关键在告诉 FrankenPHP:所有请求都交给 public/index.php 处理,并把原始 URI、方法、头信息等正确注入 $_SERVER。以下是最小可行配置:
server: document_root: ./public front_controller: /index.php必须开启,否则 Symfony 的 Request::createFromGlobals() 拿不到真实路径enable_rewriting: true确保 PATH_INFO 和 SCRIPT_NAME 正确(尤其对 /admin/xxx 这类子路径)rewrite:from: ^/(.*) to: /index.php?path=$1 type: prefix
注意:document_root 必须指向 public/ 目录,不是项目根目录;front_controller 值是相对于 document_root 的路径,所以写 /index.php,不是 ./public/index.php。
Symfony 环境变量和 APP_ENV 怎么传进去?
FrankenPHP 不读取 .env 文件,也不自动加载 var/cache。你得手动注入环境变量,否则开发环境可能走 prod 缓存、或报 APP_SECRET 缺失:
- 启动时加
-e APP_ENV=dev -e APP_DEBUG=1 - 或者在
frankenphp.yaml里用environment字段(v1.2+ 支持):environment: APP_ENV: dev APP_DEBUG: '1' APP_SECRET: your_secret_here
-
APP_DEBUG=1必须是字符串'1',布尔值true会被 YAML 解析成布尔,FrankenPHP 当前只认字符串值
静态文件(CSS/JS)404 或没走缓存怎么办?
FrankenPHP 默认不处理 .css、.js 等后缀的 MIME 类型,也不会自动加 Cache-Control。结果就是浏览器加载失败,或每次重刷都重新下载:
- 在
frankenphp.yaml的server下加static_files配置:static_files: - extensions: [css, js, png, jpg, gif, svg, webp] cache_ttl: 3600
- 确保这些文件真在
public/下(比如public/build/app.css),别放在assets/源目录里就以为能直接访问 - 如果用了 Webpack Encore,确认已运行
yarn build或npm run build,FrankenPHP 不会帮你编译资产
最常被忽略的是:改完 frankenphp.yaml 后必须重启服务(Ctrl+C 再 frankenphp run),热重载不生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











