Typical PHPStan configuration file for a Symfony project

Published on 2020-11-11 • Modified on 2020-11-20

Here is a typical PHPStan configuration file for a Symfony project. I have added some links to the documentation, so you know what the purpose of each parameter is. There are some plugins to install. The Symfony one is essential as it allows PHPStan to access and inspect the dependency injection container. The others bring additional rules. Of course, you are free to install them or not. If you start using PHPStan with a legacy project, it will probably raise a lot of warnings. In this case, my advice is to start with level 0 and then increase the level once you have fixed the errors of the current level. Take this as a game! 😀


# configuration/phpstan.neon
includes:
    # require phpstan/extension-installer to avoid including these lines                                            PHPStan 1.x compat
    #- vendor/ekino/phpstan-banned-code/extension.neon     # https://github.com/ekino/phpstan-banned-code           ✅
    #- vendor/phpstan/phpstan-symfony/extension.neon       # https://github.com/phpstan/phpstan-symfony             ✅
    #- vendor/phpstan/phpstan-deprecation-rules/rules.neon # https://github.com/phpstan/phpstan-deprecation-rules   ✅
    #- vendor/phpstan/phpstan-strict-rules/rules.neon      # https://github.com/phpstan/phpstan-strict-rules        ✅
    #- vendor/phpstan/phpstan/phpstan-doctrine             # https://github.com/phpstan/phpstan-doctrine            ✅
    #- phar://phpstan.phar/conf/bleedingEdge.neon          # https://phpstan.org/blog/what-is-bleeding-edge

# These are custom rules, check-out: https://www.strangebuzz.com/en/blog/creating-custom-phpstan-rules-for-your-symfony-project
rules:
    - App\PHPStan\ControllerIsFinalRule
    - App\PHPStan\ControllerExtendsSymfonyRule
    #- App\PHPStan\NoNewinControllerRule

parameters:
    # https://phpstan.org/config-reference#rule-level
    level: 9 # Pinned to 9; max is level 10 as of PHPStan 2.0

    # https://phpstan.org/config-reference#analysed-files
    # Note that I have put my configuraiton file in the "./configuration" directory
    # if you have yours at the root of your project remove the "../"
    paths:
        - ../config
        - ../src
        - ../tests
        - ../public

    excludePaths:
        - ../config/reference.php # generated
        - ../src/Controller/Snippet/Snippet303Trait.php

    # https://github.com/phpstan/phpstan-symfony#configuration
    # Specific configuration for the Symfony plugin
    symfony:
        # I use the prod env because I have false positive regarding the tests which
        # are executed in the test environment.
        containerXmlPath: ../var/cache/prod/App_KernelProdDebugContainer.xml

    # https://github.com/phpstan/phpstan-doctrine — a nullable property backed by a
    # non-nullable column is a normal pre-persist pattern in this project.
    doctrine:
        allowNullablePropertyForRequiredField: true

    # Nothing ignored! (almost!) 🎉
    ignoreErrors:

    # I don't use the Symfony PHPUnit bridge in this project, but if you do, you
    # probably will have to add the following bootstrap file:
    #bootstrapFiles:
        #- %rootDir%/../../../vendor/bin/.phpunit/phpunit/vendor/autoload.php

 More on Stackoverflow   Read the doc  More on the web  Random snippet

  Work with me!


Call to action

Did you like this post? You can help me back in several ways: (use the "reply" link on the right to comment or to contact me )

Thank you for reading! And see you soon on Strangebuzz! 😉

COil