avatarIbrar Hussain

Summary

The provided content outlines the process of setting up PHP Coding Standards Fixer (PHP-CS-Fixer) for a Laravel project to enforce PSR-2 coding standards.

Abstract

The article details the installation and configuration of PHP-CS-Fixer for maintaining consistent coding standards in Laravel projects. It emphasizes the importance of adhering to PSR-2 for code stability, especially in collaborative environments. The setup involves requiring the PHP-CS-Fixer package via Composer, creating a .php-cs-fixer.php configuration file with an extensive list of rules, and adding scripts to the composer.json file for running fixes and linting. The configuration file provided in the article is comprehensive and can be customized according to project-specific needs. The article also lists resources for further documentation and editor plugins for integrating PHP-CS-Fixer into various development environments.

Opinions

  • The author suggests that maintaining a consistent coding standard is crucial for project stability, regardless of project size or team composition.
  • Utilizing PHP-CS-Fixer is recommended for Laravel projects to adhere to PSR-2 coding standards.
  • The article provides a predefined set of rules within the .php-cs-fixer.php configuration file but encourages developers to tailor it to their project's requirements.
  • The inclusion of scripts in the composer.json file for dry-run and auto-fixing operations is presented as a best practice for code quality assurance.
  • The author considers it important to provide links to additional resources and editor plugins, indicating a commitment to comprehensive tooling and developer convenience.

Setup PHP-CS-Fixer for Laravel Project

Whether you are working on a small project or a big project with multiple team members, then you need to follow proper coding standards to maintain code stability.

Laravel follows the PSR-2 coding standard and the PSR-4 autoloading standard. To maintain the same coding standard as PSR-2 for your project(s) there are multiple packages available that can help you fix your code to follow standards.

In this article, we will use PHP Coding Standards Fixer to setup it up on a Laravel project level.

The following are the steps:

Step # 1

Go to your project root folder and run the following command:

composer require friendsofphp/php-cs-fixer --dev

Step # 2

In your project root, create a new file named .php-cs-fixer.php and add the following code and then save it.

<?php

use PhpCsFixer\Config;
use PhpCsFixer\Finder;
$rules = [
    'array_syntax' => ['syntax' => 'short'],
    'binary_operator_spaces' => [
        'default' => 'single_space',
        'operators' => ['=>' => null]
    ],
    'blank_line_after_namespace' => true,
    'blank_line_after_opening_tag' => true,
    'blank_line_before_statement' => [
        'statements' => ['return']
    ],
    'single_space_around_construct' => true,
    'control_structure_braces' => true,
    'curly_braces_position' => true,
    'control_structure_continuation_position' => true,
    'declare_parentheses' => true,
    'statement_indentation' => true,
    'no_multiple_statements_per_line' => true,
    'cast_spaces' => true,
    'class_attributes_separation' => [
        'elements' => [
           'method' => 'one',
           'trait_import' => 'none'
        ]
    ],
    'class_definition' => true,
    'concat_space' => [
        'spacing' => 'one'
    ],
    'declare_equal_normalize' => true,
    'elseif' => true,
    'encoding' => true,
    'full_opening_tag' => true,
    'fully_qualified_strict_types' => true,
    'function_declaration' => true,
    'function_typehint_space' => true,
    'heredoc_to_nowdoc' => true,
    'include' => true,
    'increment_style' => ['style' => 'post'],
    'indentation_type' => true,
    'linebreak_after_opening_tag' => true,
    'line_ending' => true,
    'lowercase_cast' => true,
    'constant_case' => true,
    'lowercase_keywords' => true,
    'lowercase_static_reference' => true,    
    'magic_method_casing' => true,
    'magic_constant_casing' => true,
    'method_argument_space' => true,
    'native_function_casing' => true,
    'no_alias_functions' => true,
    'no_extra_blank_lines' => [
        'tokens' => [
            'extra',
            'throw',
            'use'
        ]
    ],
    'no_blank_lines_after_class_opening' => true,
    'no_blank_lines_after_phpdoc' => true,
    'no_closing_tag' => true,
    'no_empty_phpdoc' => true,
    'no_empty_statement' => true,
    'no_leading_import_slash' => true,
    'no_leading_namespace_whitespace' => true,
    'no_mixed_echo_print' => [
        'use' => 'echo'
    ],
    'no_multiline_whitespace_around_double_arrow' => true,
    'multiline_whitespace_before_semicolons' => [
        'strategy' => 'no_multi_line'
    ],
    'no_short_bool_cast' => true,
    'no_singleline_whitespace_before_semicolons' => true,
    'no_spaces_after_function_name' => true,
    'no_spaces_around_offset' => true,
    'no_spaces_inside_parenthesis' => true,
    'no_trailing_comma_in_singleline' => true,
    'no_trailing_whitespace' => true,
    'no_trailing_whitespace_in_comment' => true,
    'no_unneeded_control_parentheses' => true,
    'no_unreachable_default_argument_value' => true,
    'no_useless_return' => true,
    'no_whitespace_before_comma_in_array' => true,
    'no_whitespace_in_blank_line' => true,
    'normalize_index_brace' => true,
    'not_operator_with_successor_space' => false,
    'object_operator_without_whitespace' => true,
    'ordered_imports' => ['sort_algorithm' => 'alpha'],
    'phpdoc_indent' => true,
    'general_phpdoc_tag_rename' => true,
    'phpdoc_inline_tag_normalizer' => true,
    'phpdoc_tag_type' => true,
    'phpdoc_no_access' => true,
    'phpdoc_no_package' => true,
    'phpdoc_no_useless_inheritdoc' => true,
    'phpdoc_scalar' => true,
    'phpdoc_single_line_var_spacing' => true,
    'phpdoc_summary' => true,
    'phpdoc_to_comment' => true,
    'phpdoc_trim' => true,
    'phpdoc_types' => true,
    'phpdoc_var_without_name' => true,
    'psr_autoloading' => true,
    'self_accessor' => true,
    'short_scalar_cast' => true,
    'simplified_null_return' => false,
    'single_blank_line_at_eof' => true,
    'single_blank_line_before_namespace' => true,
    'single_class_element_per_statement' => true,
    'single_import_per_statement' => true,
    'single_line_after_imports' => true,
    'single_line_comment_style' => [
        'comment_types' => ['hash']
    ],
    'single_quote' => true,
    'space_after_semicolon' => true,
    'standardize_not_equals' => true,
    'switch_case_semicolon_to_colon' => true,
    'switch_case_space' => true,
    'ternary_operator_spaces' => true,
    'trailing_comma_in_multiline' => true,
    'trim_array_spaces' => true,
    'unary_operator_spaces' => true,
    'visibility_required' => [
        'elements' => ['method', 'property']
    ],
    'whitespace_after_comma_in_array' => true,
    'no_unused_imports' => true,
];

$finder = Finder::create()
    ->in([
        __DIR__ . '/app',
        __DIR__ . '/config',
        __DIR__ . '/database',
        __DIR__ . '/resources',
        __DIR__ . '/routes',
        __DIR__ . '/tests',
    ])
    ->name('*.php')
    ->notName('*.blade.php')
    ->ignoreDotFiles(true)
    ->ignoreVCS(true);
$config = new Config();
return $config->setFinder($finder)
    ->setRules($rules)
    ->setRiskyAllowed(true)
    ->setUsingCache(true);

This file contains local configurations that will be used instead of project configurations. It will let you configure rules, the files and directories that need to be analysed.

Feel free to change the above file to suit your needs.

Step # 3

Open composer.json file and add the following lines to the script section:

"sniff": [
     "./vendor/bin/php-cs-fixer fix -vvv --dry-run --show-progress=dots"
],
"lint": [
    "./vendor/bin/php-cs-fixer fix -vvv --show-progress=dots"
],

With this, we have added two scripts that we can run with the composer command:

  • composer sniff This command is used for dry-run to show you all the files that need to be fixed without fixing them.
  • composer lint This command will try to auto-fix your code and will show you the summary at the end.

Following are some useful links:

If you want to install PHP Coding Standards Fixer on your favourite editor then the following dedicated plugins are available:

How To
Webdev
Laravel
Php Cs Fixer
Recommended from ReadMedium