我喜欢整理一切并保持代码尽可能清洁。用手做这件事真是太无聊了……老实说,这也是过去一个世纪的东西,因为有很多有用的工具可以很好地帮助我们保持美丽的代码组织! ð
在这篇文章中,我将向您展示如何设置我的PHP项目以自动格式化。 ð
1.设置格式
1.1。安装包装php-cs-fixer
composer require friendsofphp/php-cs-fixer
1.2。在项目的根部创建.php_cs文件
<?php
$finder = \PhpCsFixer\Finder::create()
->in(__DIR__)
->exclude(['bootstrap', 'storage', 'vendor'])
->name('*.php')
->ignoreDotFiles(true)
->ignoreVCS(true);
return PhpCsFixer\Config::create()
->setRules([
'@PSR2' => true,
'array_syntax' => ['syntax' => 'short'],
'ordered_imports' => ['sortAlgorithm' => 'length'],
'no_unused_imports' => true,
])
->setFinder($finder);
在此示例中,这将发生:
- Bootstrap,存储和供应商目录将不会格式化。
- 将考虑所有
*.php
文件。 - PRS2规则是将要使用的规则!
- 像
array()
这样的数组将被转换为[]
。 - 导入语句将按其长度订购以给出金字塔效应。
- 未使用的进口将被删除。
检查包装文档并根据您的需要进行更改!
1.3。将脚本添加到您的Composer.json文件
"scripts": {
"format": "vendor/bin/php-cs-fixer fix"
}
1.4。运行
composer format
检查以下基本示例!
<?php
namespace Package\Services;
// Unwanted space here!
use Package\Box;
use Illuminate\Support\Facades\Session as LaravelSession; // This should be the last!
use Package\Contracts\SomeInterface;
class SessionService implements SomeInterface
{
// Unwanted space here!
public function load(): Box
{
return LaravelSession::has(Box::class)
? LaravelSession::get(Box::class)
: new Box();
}
}
- 名称空间后只有1个空间。
-
LaravelSession
使用线移至最终导入。 - 在
load
函数之前删除了一个空线。 - 在文件末尾添加了一个空行。
<?php
namespace Package\Services;
use Package\Box;
use Package\Contracts\SomeInterface;
use Illuminate\Support\Facades\Session as LaravelSession;
class SessionService implements SomeInterface
{
public function load(): Box
{
return LaravelSession::has(Box::class)
? LaravelSession::get(Box::class)
: new Box();
}
}
2.使其自动运行
现在您可以使用Composer运行它。但这只是意味着您可以手动运行命令!
理想情况下,将其与测试一起添加到您的CI/CD管道中!但是在大多数情况下,至少对我而言,我没有为包装等真正的小型项目设置的管道设置。
所以我只使用Husky-PHP!这是PHP与NPM沙哑的git钩一起使用的包装。
2.1。安装husky-php
composer require --dev ccinn/composer-husky-plugin ccinn/husky-php
2.2。将钩子添加到Composer.json
如果要使用其他钩子,请检查包的文档!
通常,我只使用pre-commit
进行格式化,而pre-push
进行测试。
{
"hooks": {
"pre-commit": "composer format",
}
}
现在,当您提交代码时,composer format
将自动运行! ð
我真的希望这对您和我一样有用! ð