Doctrine Annotation Coding Standard for PHP_CodeSniffer provides some additional sniffs centered on DocBlock annotations for Doctrine ORM.
Applies to DocBlocks of properties that are mapped as either @ORM\ManyToOne or @ORM\OneToOne.
- Checks for missing
@ORM\JoinColumnannotation - If
@ORM\JoinColumnexists, checks ifnullableis implicitly assumed to betrue
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.
Applies to all DocBlocks of Doctrine-mapped properties.
- Checks for missing
@vartag - Checks the type stated by
@varagainst 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"> <properties> <property name="doctrineExtraTypes" type="array" value="CustomerType,CompanySizeType" /> </properties> </rule>The recommended way to install Doctrine Annotation Coding Standard is through Composer.
$ composer require --dev stesie/phpcs-doctrine-annotation-rulesKeep 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.
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 --> </ruleset>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 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