Additional PHP Code Sniffer sniffs focusing on annotations for Doctrine ORM.

1.2.0 2017-10-12 11:19 UTC


Build Status Coverage Status PHPStan

Doctrine Annotation Coding Standard for PHP_CodeSniffer provides some additional sniffs centered on DocBlock annotations for Doctrine ORM.

Sniffs included in this standard

🔧 = Automatic errors fixing


Applies to DocBlocks of properties that are mapped as either @ORM\ManyToOne or @ORM\OneToOne.

  • Checks for missing @ORM\JoinColumn annotation
  • If @ORM\JoinColumn exists, checks if nullable is implicitly assumed to be true

The default value of nullable of @ORM\JoinColumn is true (as opposed to @ORM\Column), which many DEVs are unaware of and hence have NULL-able associations where they should not have ones. This sniff ensures that the nullable-choice is made explicitly.

DoctrineAnnotationCodingStandard.Commenting.VarTag 🔧

Applies to all DocBlocks of Doctrine-mapped properties.

  • Checks for missing @var tag
  • Checks the type stated by @var against actual type (according to Doctrine mapping)

This sniff supports automatic fixing with phpcbf.

Sniff provides the following settings:

  • doctrineExtraTypes: list of custom Doctrine types, that are mapped as strings (instead of objects)

Can be configured via ruleset.xml like so:

    <rule ref="DoctrineAnnotationCodingStandard.Commenting.VarTag">
            <property name="doctrineExtraTypes" type="array" value="CustomerType,CompanySizeType" />


The recommended way to install Doctrine Annotation Coding Standard is through Composer.

$ composer require --dev stesie/phpcs-doctrine-annotation-rules

Keep in mind that this is not a full coding standard, it just augments existing ones with extra checks on Doctrine annotations. If unsure, I highly recommend having a look at Slevomat Coding Standard.

Using the standard as a whole

Simply mention this (additional) standard in ruleset.xml:

<?xml version="1.0"?>
<ruleset name="AcmeProject">
	<rule ref="vendor/stesie/phpcs-doctrine-annotation-rules/src/DoctrineAnnotationCodingStandard/ruleset.xml" />
	<!-- additional standards like slevomat -->

To check your code base for violations, run PHP_CodeSniffer from the command line:

vendor/bin/phpcs --standard=ruleset.xml --extensions=php -sp src tests

Fixing errors automatically

Sniffs in this standard marked by the 🔧 symbol support automatic fixing of coding standard violations. To fix your code automatically, run phpcbf insteand of phpcs:

vendor/bin/phpcbf --standard=ruleset.xml --extensions=php -sp src tests