Przejdź do treści

Używanie PHP attributes zamiast doctrine annotations – rector PHP.

PHP od wersji 8.0 posiada natywne atrybuty (attributes). Aby w prosty sposób zamienić w całej aplikacji annotacje na atrybuty możemy posłużyć się narzędziem Rector .

Gdzie możemy używać atrybutów zamiast adnotacji?

  • Mapowanie encji doctrine
  • Mapowanie routingu
  • Wszystkie customowe adnotacje, które napisaliśmy
  • Konfiguracja validatora

Czego będziemy potrzebować?

  • Rector

Aby zainstalować rectora w konsoli należy wpisać:

composer require rector/rector --dev
  • Doctrine w wersji >=2.9

Po instalacji rectora oraz upewnieniu się, że posiadamy doctrine w wersji >=2.9 zainicjujmy rectora używając komendy:

vendor/bin/rector init

W głównym katalogu powinien pojawić się plik konfiguracyjny rector.php.

Poniżej przedstawiam konfigurację aby zamienić adnotacje na atrybuty dla aplikacji napisanej w Symfony.

<?php

declare(strict_types=1);

use Rector\CodingStyle\Rector\Use_\RemoveUnusedAliasRector;
use Rector\Core\Configuration\Option;
use Rector\Doctrine\Set\DoctrineSetList;
use Rector\Symfony\Set\SymfonySetList;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

return static function (ContainerConfigurator $containerConfigurator): void {
    $parameters = $containerConfigurator->parameters();
    $parameters->set(Option::AUTO_IMPORT_NAMES, true);
    $parameters->set(Option::IMPORT_SHORT_CLASSES, true);


    $containerConfigurator->import(DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES);
    $containerConfigurator->import(SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES);

    $containerConfigurator->import(SymfonySetList::SYMFONY_CODE_QUALITY);
    $containerConfigurator->import(SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION);

    $services = $containerConfigurator->services();

    $services->set(RemoveUnusedAliasRector::class);
};

Następnie możemy sprawdzić jakie zmiany rector wprowadzi w plikach

vendor/bin/rector process src --dry-run

Gdy nie zauważmy nic niepokojącego wystarczy użyć powyższą komendę bez --dry-run

vendor/bin/rector process src

Na koniec musimy zmienić plik konfiguracyjny doctrine.yaml szukamy w nim parametr odpowiedzialny za typ mapowania, znajduje się on w doctrine.orm.mappings.{namespace[domyślnie App]}.type i zamieniamy annotation na attribute.

To wszystko, na koniec jeśli nie potrzebujemy rectora wystarczy go usunać:

composer remove rector/rector --dev

Po czym usuwamy plik rector.php.

1 komentarz do “Używanie PHP attributes zamiast doctrine annotations – rector PHP.”

  1. Bardzo fajny wpis, widziałem ostatnio podobne artykuły i ten się wyróżnia na tle innych oraz jest wart uwagi. Konkretnie objaśniony temat. Bardzo przyjemnie się go czyta. Czekam na takich więcej 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *