Когда я вызываю свой собственный сервис внутри своего контроллера, я получаю следующее исключение:
Попытка вызвать неопределенный метод с именем «getDoctrine» класса «App \ Service \ schemaService».
Это мой собственный сервис /src/Service/schemaService.php
<?php
namespace App\Service;
use App\Entity\SchemaId;
use Doctrine\ORM\EntityManagerInterface;
class schemaService {
private $em;
public function __construct(EntityManagerInterface $em){
$this->em = $em;
}
public function createSchema($schema){
$em = $this->getDoctrine()->getManager(); // ** Exception here ** //
$schemaid=new SchemaId();
$schemaid->setSId(1);
$schemaid->setSName('test');
$schemaid->setSType(1);
$em->persist($schemaid);
$em->flush();
return $schemaid->getId();
}
}
?>
Это мой контроллер src / Controller / Controller.php
<?php
namespace App\Controller;
use App\Service\schemaService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class Controller extends AbstractController {
public function form(){
$em = $this->getDoctrine()->getManager();
$schemaid=new schemaService($em);
$schemaid->createSchema(1);
return new Response();
}
}
?>
Внутри /config/services.yaml я добавляю следующие строки:
services:
App\Service\schemaService:
arguments: ["@doctrine.orm.default_entity_manager"]
Как я могу использовать Doctrine внутри Сервисов? Что я делаю не так?
Я не совсем понимаю, как это работает, это одна из сотен попыток заставить его работать. Может я что-то не так сделал.






Вы создаете EntityManagerInterface (что, кстати, нормально), но затем используете методы, которых в нем нет.
Вместо
$em = $this->getDoctrine()->getManager(); // ** Exception here ** //
Использовать:
$em = $this->em;
Отлично, мне помогло! Благодарить!
Вы напечатали EntityManagerInterface в сервисном контроллере, чтобы получить
$this->em, зачем вам нужна другая версия для$emвcreateSchema()?