Как преобразовать аннотацию symfony gedmo в атрибуты PHP 8

Я работаю над проектом Symfony 6 PHP 8 и использую расширение доктрины gedmo.

Я не могу найти полную документацию о преобразовании аннотации gedmo в атрибуты PHP 8.

Я пытаюсь конвертировать так:

/**
 * @ORM\Column(type = "string", length=255)
 * @Gedmo\Slug(fields = {"title"})
 */
private $slug;

#[Gedmo\Slug(fields: title)]

но это не работает!

Как я могу использовать gedmo с атрибутами PHP 8?

🤔 А знаете ли вы, что...
PHP поддерживает расширения для работы с множеством сторонних сервисов и API.


85
2

Ответы:

вам нужно будет сделать все свойство класса с атрибутами. свойство fields в slug должно быть массивом.

#[\Gedmo\Mapping\Annotation\Slug(fields: ['name'])]
#[\Doctrine\ORM\Mapping\Column(
    type: 'string',
    length: 255,     
)]

Решено

Ректор это поддерживает. Правило исходит из ректора-учения, которое входит в стандартный метод установки.

Следуйте инструкциям по установке rector и отредактируйте конфигурацию rector.php, чтобы добавить необходимые правила.

В Rector также есть наборы правил для обновления Symfony, чтобы увидеть rector-symfony.

Пример преобразования аннотации Doctrine и Gedmo в атрибуты PHP 8.

<?php

declare(strict_types=1);

use Rector\Config\RectorConfig;
use Rector\Doctrine\Set\DoctrineSetList;

return static function (RectorConfig $rectorConfig): void {

    $rectorConfig->sets([
        DoctrineSetList::DOCTRINE_CODE_QUALITY,
        DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES,
        DoctrineSetList::GEDMO_ANNOTATIONS_TO_ATTRIBUTES,
    
    ]);
};

например преобразует это

/**
 * @Gedmo\Slug(fields = {"title"})
 * @ORM\Column(length=128, unique=true)
 */
private $slug;

к

#[ORM\Column(length: 128, unique: true)]
#[Gedmo\Slug(fields: ['title'])]
private $slug;