Composer 本身不提供代码规范修复能力,但可通过 scripts 配置集成 php-cs-fixer 实现一键格式化;需以 --dev 安装至 require-dev,配置文件须显式指定,scripts 中命令基于项目根目录且不支持 shell 语法。

Composer 本身不提供代码规范修复能力,但可以通过 scripts 配置项集成 php-cs-fixer,实现一键格式化。关键不是“配置 Composer”,而是让 Composer 成为触发 php-cs-fixer 的快捷入口。
安装 php-cs-fixer 并设为项目本地依赖
必须用 --dev 安装到 require-dev,避免污染生产环境;不推荐全局安装,因为不同项目可能依赖不同版本的规则集。
- 运行
composer require --dev friendsofphp/php-cs-fixer - 安装后二进制文件位于
vendor/bin/php-cs-fixer,这是脚本中要调用的路径 - 若项目已有
.php-cs-fixer.php或.php-cs-fixer.dist.php,优先被读取;没有则需显式指定配置
在 composer.json 的 scripts 中定义 fix 命令
scripts 是纯字符串命令,不支持 shell 语法(如 &&、管道),也不展开环境变量。所有路径都应基于项目根目录,且需使用单引号避免 shell 解析问题。
"scripts": {
"fix": "php-cs-fixer fix --config=.php-cs-fixer.php --verbose --diff",
"fix-dry": "php-cs-fixer fix --config=.php-cs-fixer.php --dry-run --verbose"
}
-
--config必须显式指定,否则php-cs-fixer可能找不到配置或加载默认规则(往往不符合预期) -
--dry-run用于预览改动,配合--diff可看到具体修改位置 - 不要写成
vendor/bin/php-cs-fixer—— Composer 的bin-dir默认是vendor/bin,且已加入 PATH
编写 .php-cs-fixer.php 配置文件控制规则
配置文件决定哪些规则生效、是否自动加 PHP tag、是否强制 use 语句排序等。不写配置等于裸跑,默认规则会随版本升级变化,极不稳定。
立即学习“PHP免费学习笔记(深入)”;
setRules([
'@PSR12' => true,
'array_syntax' => ['syntax' => 'short'],
'ordered_imports' => true,
'no_unused_imports' => true,
])
->setFinder(
PhpCsFixer\Finder::create()
->in(['src', 'tests'])
->name('*.php')
->notName('*.blade.php')
->ignoreDotFiles(true)
->ignoreVCS(true)
);
-
setFinder()明确限定作用范围,避免误处理vendor/或生成文件 - 规则名必须拼写准确,例如
'@PSR12'不是'psr12',大小写和符号敏感 - 若使用旧版
php-cs-fixer(v2.x),配置结构不同,PhpCsFixer\Config类不存在,需用数组返回
最易被忽略的是配置文件与 php-cs-fixer 版本的兼容性 —— v3 要求 PHP 7.4+,且规则名、配置类名、finder 方法全部变更;v2 和 v3 的 .php-cs-fixer.php 不能混用。运行前先确认 vendor/bin/php-cs-fixer --version。











