ð自动格式化PHP代码
#php #laravel #ci #lint

我喜欢整理一切并保持代码尽可能清洁。用手做这件事真是太无聊了……老实说,这也是过去一个世纪的东西,因为有很多有用的工具可以很好地帮助我们保持美丽的代码组织! ð

在这篇文章中,我将向您展示如何设置我的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将自动运行! ð

我真的希望这对您和我一样有用! ð