Невозможно вернуть объект Loggable из-за ошибки репозитория Doctrine

Я хочу вернуть объект:

// use Gedmo\Loggable\Entity\LogEntry;
//...
$repo = $this->entityManager->getRepository(LogEntry::class);
$repo->revert($pizza, 1);
// ...

Но я получаю ошибку:

Класс «Gedmo\Loggable\Entity\LogEntry» не найден в настроенных пространствах имен цепочки App\Entity.

Я думаю, что это проблема Doctrine, вот мой файл config/packages/doctrine.yaml:

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'

        # IMPORTANT: You MUST configure your server version,
        # either here or in the DATABASE_URL env var (see .env file)
        #server_version: '16'

        profiling_collect_backtrace: '%kernel.debug%'
        use_savepoints: true
    orm:
        auto_generate_proxy_classes: true
        enable_lazy_ghost_objects: true
        report_fields_where_declared: true
        validate_xml_mapping: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                type: attribute
                is_bundle: false
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App
        filters:
            # soft deletion
            softdeleteable:
                class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
                enabled: true
        controller_resolver:
            auto_mapping: false

when@test:
    doctrine:
        dbal:
            # "TEST_TOKEN" is typically set by ParaTest
            dbname_suffix: '_test%env(default::TEST_TOKEN)%'

when@prod:
    doctrine:
        orm:
            auto_generate_proxy_classes: false
            proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies'
            query_cache_driver:
                type: pool
                pool: doctrine.system_cache_pool
            result_cache_driver:
                type: pool
                pool: doctrine.result_cache_pool

    framework:
        cache:
            pools:
                doctrine.result_cache_pool:
                    adapter: cache.app
                doctrine.system_cache_pool:
                    adapter: cache.system

Версии:

  • Симфония 6.4
  • Доктрина формы 2.19.3
  • Пакет доктрин 2.12
  • Пакет расширений Doctrine 1.11.0

Есть ли конфигурация, которую я должен изменить?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, это действительно была проблема с отображением Doctrine, но вместо редактирования файла Doctrine.yaml я создал собственный класс ведения журнала:

<?php

namespace App\Entity;

use App\Repository\LogActivityRepository;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Loggable\Entity\MappedSuperclass\AbstractLogEntry;

#[ORM\Entity(repositoryClass: LogActivityRepository::class)]
#[ORM\Index(columns: ['username'], name: 'log_activity_user_index')]
#[ORM\Index(columns: ['object_class'], name: 'log_activity_class_index')]
#[ORM\Index(columns: ['logged_at'], name: 'log_activity_date_index')]
#[ORM\Index(columns: ['object_id', 'object_class', 'version'], name: 'log_activity_version_index')]
class LogActivity extends AbstractLogEntry
{
    /**
     * @return string|null
     */
    public function getModelName(): ?string
    {
        $modelName = '';
        foreach (explode('\\', $this->getObjectClass()) as $key => $part) {
            if ($key > 1) {
                if ($key > 2) {
                    $modelName .= '\\';
                }
                $modelName .= $part;
            }
        }
        return $modelName;
    }

    /**
     * Format data in an associative array of form [column => data]
     * @return array
     */
    public function getDataAsArray(): array
    {
        $record = [];
        foreach ($this->getData() ?? [] as $column => $data) {
            $record[$column] = $data;
        }
        return $record;
    }
}

И использовал его так:

// use App\Entity\LogActivity;
//...
$repo = $this->entityManager->getRepository(LogActivity::class);
$repo->revert($pizza, 1);
// ...

Другие вопросы по теме