Witajcie!
Korzystam w projekcie z komponentu Symfony DI oraz Doctrine (standalone, żaden flex). Tak wygląda mój composer.json:
"require": {
"php": "^7.2",
"cakephp/collection": "^3.8",
"doctrine/orm": "^2.6",
"filp/whoops": "^2.1",
"symfony/config": "^4.2",
"symfony/dependency-injection": "^4.2",
"symfony/dotenv": "^4.2",
"symfony/http-foundation": "^4.2",
"symfony/yaml": "^4.0",
"symfony/serializer": "4.2"
}
Konfiguracja serwisów:
services:
_defaults:
autowire: true
autoconfigure: true
public: false
Rmr\:
resource: '../src/*'
exclude: '../src/{Entity, Http}'
# próbowałem również tak podpiąć klasy Doctrine
# Doctrine\ORM\:
# resource: '../vendor/doctrine/orm/lib/Doctrine/ORM'
# exclude: '../vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver'
Problem polega na tym, że w żaden sposób nie mogę wstrzyknąć klas Doctrine, które są mi potrzebne do inicjalizacji repozytoriów.
Repozytoria:
abstract class AbstractEntityRepository extends EntityRepository implements EntityRepositoryInterface
{
// to konstruktor wzięty żywcem z ServiceEntityRepository z DoctrineBundle
// /**
// * AbstractEntityRepository constructor.
// * @param ManagerRegistry $registry
// * @param string $entityClass The class name of the entity this repository manages
// */
// public function __construct(ManagerRegistry $registry, string $entityClass)
// {
// $manager = $registry->getManagerForClass($entityClass);
//
// if ($manager === null) {
// throw new \LogicException(sprintf(
// 'Could not find the entity manager for class "%s". Check your Doctrine configuration to make sure it is configured to load this entity’s metadata.',
// $entityClass
// ));
// }
//
// parent::__construct($manager, $manager->getClassMetadata($entityClass));
// }
}
class ClientRepository extends AbstractEntityRepository implements ClientRepositoryInterface
{
// /**
// * ClientRepository constructor.
// * @param ManagerRegistry $registry
// */
// public function __construct(ManagerRegistry $registry)
// {
// parent::__construct($registry, Client::class);
// }
}
Wersja z konstruktorami daje taki błąd:
Cannot autowire service \"Rmr\\Repository\\ClientRepository\": argument \"$registry\" of method \"__construct()\" references interface \"Doctrine\\Persistence\\ManagerRegistry\" but no such service exists. Did you create a class that implements this interface?
Wersja bez konstruktorów:
Cannot autowire service \"Rmr\\Repository\\ClientRepository\": argument \"$em\" of method \"Doctrine\\ORM\\EntityRepository::__construct()\" references interface \"Doctrine\\ORM\\EntityManagerInterface\" but no such service exists. Did you create a class that implements this interface?
Także moje pytanie wygląda tak: jak mogę zintegrować te dwa komponenty, aby korzystać z klas Doctrine w taki sam sposób, jak to wygląda w Symfony? Tutaj nie mogę korzystać z żadnych Symfonowych bundli i się zastanawiam, jak to sam ogarnąć.
Dzięki za pomoc i pozdrawiam.