Как использовать доктрину с Slim Framework 4?

Пытаюсь использовать доктрину с тонкой структурой 4, но документации нет. Следуя информации по ссылке http://www.slimframework.com/docs/v3/cookbook/database-doctrine.html выдает ошибку.

Класс "тонкий контейнер" не найден

<?php

// bootstrap.php

use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Cache\FilesystemCache;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
use Doctrine\ORM\Tools\Setup;
use Slim\Container;

require_once __DIR__ . '/vendor/autoload.php';

$container = new Container(require __DIR__ . '/settings.php');

$container[EntityManager::class] = function (Container $container): EntityManager {
    $config = Setup::createAnnotationMetadataConfiguration(
        $container['settings']['doctrine']['metadata_dirs'],
        $container['settings']['doctrine']['dev_mode']
    );

    $config->setMetadataDriverImpl(
        new AnnotationDriver(
            new AnnotationReader,
            $container['settings']['doctrine']['metadata_dirs']
        )
    );

    $config->setMetadataCacheImpl(
        new FilesystemCache(
            $container['settings']['doctrine']['cache_dir']
        )
    );

    return EntityManager::create(
        $container['settings']['doctrine']['connection'],
        $config
    );
};

person Lovepreet Singh    schedule 08.01.2020    source источник


Ответы (1)


person    schedule
comment
Это дает мне следующее сообщение об ошибке. Ожидаемый тип «Doctrine \ Common \ Persistence \ Mapping \ Driver \ MappingDriver». Нашел Doctrine \ ORM \ Mapping \ Driver \ AnnotationDriver. - person Marcus Christiansen; 08.05.2020
comment
Слишком мало информации для отладки. Посмотрите на пространства имен из классов, которые вы использовали в dependencies.php Вы скопировали - вставили этот код? Это всего лишь пример того, как это сделать, и, возможно, что-то было изменено в доктрине. - person Максим Дубинин; 08.05.2020
comment
Этот метод находится в файле Configuration.php. Я думал, вы знаете, что изменилось в Slim. Я впервые работаю с фреймворком. Похоже, эта функция теперь ожидает MappingDriver $driverImpl - person Marcus Christiansen; 08.05.2020
comment
Хм, сейчас я не вижу этот файл в моем проекте, вы можете показать свой код? - person Максим Дубинин; 08.05.2020
comment
Я создал репозиторий github на github.com/marcuschristiansen/slim-boilerplate. Файл - это тонкий шаблон / app / orm.php - Строка 26-31. Надеюсь, это поможет. Если я пропущу MappingDriver $driverImpl, ошибка исчезнет, ​​но я не уверен, что это все. - person Marcus Christiansen; 08.05.2020
comment
общедоступная функция setMetadataDriverImpl (MappingDriver $ driverImpl) использует интерфейс MappingDriver, мы используем класс AnnotationDriver, который расширяет Doctrine \ Common \ Persistence \ Mapping \ Driver \ AnnotationDriver как AbstractAnnotationDriver. Также Doctrine \ Common \ Persistence \ Mapping \ Driver \ AnnotationDriver считает, что ProblemDriver в автозагрузке классов, а не в slim. Попробуйте использовать composer dump-autoload -o. - person Максим Дубинин; 09.05.2020