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\JoinColumn
annotation - If
@ORM\JoinColumn
exists, checks ifnullable
is 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
@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">
<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-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.
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