php-forge / coding-standard
Coding standards for PHP projects.
Installs: 643
Dependents: 9
Suggesters: 0
Security: 0
Stars: 1
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/php-forge/coding-standard
Requires
- php: >=8.1
- rector/rector: ^2.1
- symplify/easy-coding-standard: ^13.0
This package is auto-updated.
Last update: 2026-01-24 18:12:32 UTC
README
Coding standard
Centralized ECS and Rector configuration for PHP projects
Share one set of rules across multiple repositories via Composer.
Features
Installation
composer require php-forge/coding-standard:^0.1 --dev
Quick start
This package provides shared configuration files under vendor/php-forge/coding-standard/config/:
config/ecs.php(shared ECS rules, no paths)config/rector.php(shared Rector rules, no paths)
Consumer repositories should create wrapper config files at the repository root. Wrappers define the paths for that repository and import the shared configuration.
Generic repository
ECS (ecs.php)
Create ecs.php in your repository root:
<?php declare(strict_types=1); /** @var \Symplify\EasyCodingStandard\Configuration\ECSConfigBuilder $ecsConfigBuilder */ $ecsConfigBuilder = require __DIR__ . '/vendor/php-forge/coding-standard/config/ecs.php'; return $ecsConfigBuilder->withPaths( [ __DIR__ . '/src', __DIR__ . '/tests', ], );
To override or skip rules locally, apply changes after requiring the shared config:
<?php declare(strict_types=1); /** @var \Symplify\EasyCodingStandard\Configuration\ECSConfigBuilder $ecsConfigBuilder */ $ecsConfigBuilder = require __DIR__ . '/vendor/php-forge/coding-standard/config/ecs.php'; return $ecsConfigBuilder ->withPaths( [ __DIR__ . '/src', __DIR__ . '/tests', ], ) ->withSkip( [ // add project-specific skips here. ], );
Rector (rector.php)
Create rector.php in your repository root:
<?php declare(strict_types=1); use Rector\Config\RectorConfig; return static function (RectorConfig $rectorConfig): void { $rectorConfig->import(__DIR__ . '/vendor/php-forge/coding-standard/config/rector.php'); $rectorConfig->paths( [ __DIR__ . '/src', __DIR__ . '/tests', ], ); // project-specific overrides can be added after the import. // $rectorConfig->skip([...]); };
Yii2 repositories
If you need framework-specific rules (Yii2), keep them in a separate config file (or a separate package) and import it after the base configuration. Do not mix Yii2-specific rules into the generic base.
Example (Rector):
<?php declare(strict_types=1); use Rector\Config\RectorConfig; return static function (RectorConfig $rectorConfig): void { $rectorConfig->import(__DIR__ . '/vendor/php-forge/coding-standard/config/rector.php'); $rectorConfig->import(__DIR__ . '/rector-yii2.php'); $rectorConfig->paths( [ __DIR__ . '/src', __DIR__ . '/tests', ], ); };
Composer scripts
Follow the same convention used across PHP Forge repositories:
{
"scripts": {
"ecs": "./vendor/bin/ecs --fix",
"rector": "./vendor/bin/rector process"
}
}