必须用composer create-project初始化项目,因手动建项目会漏掉flex自动配置,导致config/packages无默认配置、src/controller/不自动生成,且flex是symfony 5.4+配置中枢,禁用将引发组件配置错配与路径错误。

新手入门 Symfony,关键不是先学怎么写控制器,而是把项目“立起来”——用对方式初始化、装对依赖、分清环境边界。错一步,后面 bin/console 报错、命令不识别、配置不生效,全是因为底层没搭稳。
初始化必须用 create-project,别手写或 require
Symfony 不是一个“包”,而是一套带目录结构、配置文件和启动入口的完整项目模板。官方只保证 create-project 生成的结果能跑起来。
-
API/微服务项目:用
composer create-project symfony/skeleton my_project—— 最小骨架,无 Twig、无 Doctrine、无 Web 服务器 -
通用网站项目:用
composer create-project symfony/website-skeleton my_project—— 开箱即用,含 Twig、AssetMapper、WebServerBundle 等 - 目标目录(如
my_project)必须不存在,否则命令静默失败,不会覆盖 - PHP 版本需 ≥ 8.1(symfony/skeleton ^7.0 要求),低版本会拉取旧版或卡住
加包要靠 require,但 Bundle 启用不能少
运行 composer require vendor/bundle-name 只是第一步:下载代码、更新 composer.json、刷新自动加载。它不等于启用。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须手动打开
config/bundles.php,添加启用行,例如:CronSymfonyBundle::class => ['all' => true] - 如果 Flex 已启用且该包有 recipe,配置文件(如
config/packages/cron.yaml)通常自动生成;若没装 Flex 或用的是 skeleton,则需自己创建并填写 - 启用后务必执行
bin/console cache:clear,否则内核仍按旧缓存启动,行为不一致 - 别用
composer require symfony/symfony—— 这只会装一个库,不是可运行项目,bin/console直接报错
开发依赖和生产依赖必须严格分开
依赖进哪个区块,直接决定它会不会出现在线上环境。
-
运行时必需的包(如
symfony/framework-bundle、doctrine/orm、twig/twig)必须写在require -
仅开发/测试用的包(如
phpunit/phpunit、symfony/maker-bundle、symfony/debug-bundle)必须进require-dev -
symfony/flex是个例外:它不参与运行,只影响安装流程,建议放在require-dev - 部署时必须加
--no-dev:composer install --no-dev --optimize-autoloader,否则调试工具可能泄露源码或干扰类加载
Flex 配置失效?先查这四点
Flex 让 composer require 自动写配置、建目录、注册 bundle,但它不是永远生效。
- 确认 Flex 已安装:
composer show symfony/flex,输出应为已安装状态(非 dev-main) - 检查是否允许 contrib recipes:
composer config extra.symfony.allow-contrib应返回true - recipe 只对稳定版本生效,默认跳过
-dev、-alpha等,可用@stable强制,例如:composer require symfony/ux-turbo:^2.0@stable - Flex 生成的配置常含
when@dev或when@prod条件块,核对当前APP_ENV值是否匹配,否则配置不加载










