Afin de mettre à jour Symfony sur l’application d’un client, nous avons dû corriger quelques usages de Doctrine au préalable. Il y a quelques années de cela, il était commun d’écrire ce genre de code dans un contrôleur :
$order = $this->getDoctrine()->getRepository('App:Order')->find($id); La syntaxe <Namespace>:<EntityName> étant dépréciée, il faut mettre à jour en utilisant la syntaxe FQCN.
use App\Entity\Order; $order = $this->getDoctrine()->getRepository(Order::class)->find($id); A travers cet article, nous verrons comment créer une règle custom Rector, qui répondra à ce besoin.
Mais quitte à écrire une règle, ne pouvons-nous pas corriger le code ci-dessus pour qu’il ne transgresse pas la loi de Demeter ?
use App\Repository\OrderRepository; class OrderController { public function __construct( private readonly OrderRepository $orderRepository, ) { } public function show(string $id) { $order = $this->orderRepository->find($id); //... } } À JoliCode, nous n’aimons pas ajouter les outils directement aux applications Symfony :
Nous avons l’habitude de les mettre dans le dossier tools/<outils> :
tools ├─ rector │ ├─ composer.json │ └─ composer.lock ├─ phpstan │ ├─ composer.json │ └─ composer.lock └─ php-cs-fixer ├─ composer.json └─ composer.lock Dans le dossier tools/rector, nous avons le fichier composer.json suivant :
{ "type": "project", "license": "proprietary", "require": { "rector/rector": "^1.0.1" }, "require-dev": { "phpunit/phpunit": "^9.6.16", "symfony/var-dumper": "^5.4.35" }, "autoload": { "psr-4": { "App\\": "src/" } }, "autoload-dev": { "psr-4": { "App\\Tests\\": "tests/" } } } Vous noterez que nous avons pris un peu d’avance en ajoutant :
symfony/var-dumper pour pouvoir utiliser dump() dans les tests et lors du debug ;phpunit/phpunit pour pouvoir tester nos règles ;Une fois les dépendances installées, nous pouvons créer la configuration de base.
$ cd tools/rector $ vendor/bin/rector No "rector.php" config fou...
[Courte citation de 8% de l'article original]