L’outil le plus répandu en PHP pour formater son code suivant les standards (PSR-12) est PHP-CS-Fixer.
PHP-CS-Fixer analyse les fichiers PHP et les réécrit automatiquement pour qu’ils respectent un même style de code (indentation, espaces, imports, guillemets, etc.), selon un standard comme PSR-12 ou des règles qui sont définis.
Il permet ainsi d’uniformiser un projet entier en une commande, sans changer le comportement du code.
- Installer PHP-CS-Fixer globalement
composer global require friendsofphp/php-cs-fixer
- Récupérer le chemin global des binaires de composer
composer global config bin-dir --absolute
- L’ajouter au PATH
echo 'export PATH="$PATH:/CHEMIN/CI-DESSUS"' >> ~/.bashrc
source ~/.bashrc
Ensuite, pour chaque projet :
- Initialiser un dépôt git
git init && git add -A && git commit -m "Init"
- Créer le fichier de configuration à la racine du projet
nano .php-cs-fixer.dist.php
<?php
$finder = PhpCsFixer\Finder::create()
->in(__DIR__)
->exclude([
'vendor',
'node_modules',
'storage',
'cache',
'var',
])
->name('*.php')
->ignoreDotFiles(true)
->ignoreVCS(true);
return (new PhpCsFixer\Config())
->setRiskyAllowed(false)
->setIndent(' ')
->setLineEnding("\n")
->setRules([
'@PSR12' => true,
// Tableaux
'array_syntax' => ['syntax' => 'short'],
'trailing_comma_in_multiline' => ['elements' => ['arrays']],
'no_whitespace_before_comma_in_array' => true,
'whitespace_after_comma_in_array' => true,
// Imports
'ordered_imports' => ['sort_algorithm' => 'alpha'],
'no_unused_imports' => true,
'single_import_per_statement' => true,
// Chaînes et opérateurs
'single_quote' => true,
'concat_space' => ['spacing' => 'one'],
'binary_operator_spaces' => ['default' => 'single_space'],
'unary_operator_spaces' => true,
// Espaces et lignes vides
'no_trailing_whitespace' => true,
'no_extra_blank_lines' => true,
'blank_line_before_statement' => [
'statements' => ['return', 'throw', 'try'],
],
'no_blank_lines_after_phpdoc' => true,
// Divers
'no_empty_statement' => true,
'no_closing_tag' => true,
'lowercase_keywords' => true,
'native_function_casing' => true,
])
->setFinder($finder);
- Voir les changements sans rien modifier
php-cs-fixer fix --dry-run --diff
- Appliquer
php-cs-fixer fix

La documentation officielle : https://github.com/PHP-CS-Fixer/PHP-CS-Fixer
