
PHP as of version 8.0 has native attributes. To easily convert annotations into attributes throughout the application, we can use the Rector .
Where can we use attributes instead of annotations?
- Doctrine entites mapping
 - Routing mapping
 - All custom annotations that we wrote
 - Validator configuration
 
What will we need?
- Rector
 
To install rector type in the console:
composer require rector/rector --dev
- Doctrine version 
>=2.9 
After installing the rector and making sure you have doctrine version >=2.9, initialize the rector using the command
vendor/bin/rector init
The rector.php configuration file should appear in the root directory.
Below the configuration to turn annotations into attributes for an application written in 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);
};
Then we can check what changes the rector will make to the files
vendor/bin/rector process src --dry-run
If you don’t notice anything alarming, just use the above command without --dry-run
vendor/bin/rector process src
At the end we have to change the doctrine.yaml configuration file, we are looking for the parameter responsible for the mapping type, it is located in doctrine.orm.mappings.{namespace[default App]}.type and we replace annotation with attribute.
That’s all, at the end if we don’t need the rector just remove it:
composer remove rector/rector --dev
Then delete the rector.php file.