서비스 컨테이너에서 Symfony2 사용 교리
서비스 컨테이너에서 Doctrine을 어떻게 사용합니까?
코드는 "치명적인 오류 : 정의되지 않은 메서드 호출 ... :: get ()"오류 메시지를 발생시킵니다.
<?php
namespace ...\Service;
use Doctrine\ORM\EntityManager;
use ...\Entity\Header;
class dsdsf
{
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function create()
{
$id = 10;
$em = $this->get('doctrine')->getEntityManager();
$em->getRepository('...')->find($id);
}
}
services.yml
service:
site:
class: ...\Service\Site
귀하의 코드에 따르면 이미 EntityManager
주입되었습니다. 당신은 호출 할 필요는 없습니다 $em = $this->get('doctrine')->getEntityManager()
만 사용 - $this->em
.
아직 주사하지 않았다면 이것을EntityManager
읽으십시오 .
최신 정보:
컨테이너가 EntityManager
서비스에 주입 되도록해야합니다. 다음은에서 수행하는 예입니다 config.yml
.
services:
your.service:
class: YourVendor\YourBundle\Service\YourService
arguments: [ @doctrine.orm.entity_manager ]
번들의 서비스를 자체 파일 로 정의 하는 것을 선호 services.yml
하지만 조금 더 고급이므로 사용 config.yml
하면 시작하기에 충분합니다.
Entitymanager에 쉽게 액세스하려면 다음을 사용하십시오.
//services.yml
your service here:
class: yourclasshere
arguments: [@doctrine.orm.entity_manager]
그리고 수업 자체에서 :
class foo
{
protected $em;
public function __construct(\Doctrine\ORM\EntityManager $em)
{
$this->em = $em;
}
public function bar()
{
//Do the Database stuff
$query = $this->em->createQueryBuilder();
//Your Query goes here
$result = $query->getResult();
}
}
이것은 내 첫 번째 답변이므로 모든 의견에 감사드립니다. :)
이 코드를 시도하십시오 :
$em=$this->container->get('doctrine')->getEntityManager();
$rolescheduels=$em->getRepository('OCSOCSBundle:RoleScheduel')->findByUser($user->getId());
Symfony 3.x의 경우
저에게 가장 쉬운 해결책은 자동 연결 / 자동 구성을 켜고 생성자를 통해 필요한 서비스를 주입하는 것입니다. 또한 모든 컨트롤러를 설정하여 서비스로 주입하도록 허용했습니다.resource: '../../src/AppBundle/*'
#services.yml or config.yml
services:
_defaults:
autowire: true
autoconfigure: true
public: false
# Allow any controller to be used as a service
AppBundle\:
resource: '../../src/AppBundle/*'
# you can exclude directories or files
# but if a service is unused, it's removed anyway
exclude: '../../src/AppBundle/{Entity,Repository,Tests,DataFixtures,Form}'
그런 다음 모든 서비스에서 다음 과 같은 생성자를 통해 엔티티 관리자 $em
(또는 다른 서비스 / 컨트롤러 )를 주입하고 사용할 수 있습니다 .
// class xyz
private $em;
// constructor
public function __construct(\Doctrine\ORM\EntityManager $em) {
$this->em = $em;
}
public function bar() {
//Do the Database stuff
$query = $this->em->createQueryBuilder();
//Your Query goes here
$result = $query->getResult();
}
symfony3를 사용하는 모든 사용자 : 서비스 컨테이너에서 교리를 사용하려면 config / services.yml 내부에서 다음을 수행해야합니다.
servicename_manager:
class: AppBundle\Services\MyServiceClass
arguments: [ "@doctrine.orm.entity_manager" ]
Symfony 3.4를 사용하고 있습니다. 번들로 서비스를 만들고 싶다면 이것이 저에게 효과적입니다.
services:
Vendor\YourBundle\Service\YourService:
arguments:
$em: '@doctrine.orm.entity_manager'
Service.php에서
<?php
namespace Hannoma\ElternsprechtagBundle\Service;
use Doctrine\ORM\EntityManager;
use Hannoma\ElternsprechtagBundle\Entity\Time;
class TimeManager
{
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
}
in the Symfony 3.4. If you want to use Doctrine in a service you can do it: Only this method worked for me
services.yml:
YourBundle\PatchService\YourService:
public: true
arguments: [ '@doctrine.orm.entity_manager' ]
Service:
class YourService
{
private $em;
public function __construct($em) {
$this->em = $em;
}
Controller:
use YourBundle\PatchService\YourService;
/**
* @Route("/YourController/",name="YourController")
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$Notification = new YourService($em);
Since 2017 and Symfony 3.3 you can register Repository as service, with all its advantages it has.
Your code would change like this.
1. Service configuration
# app/config/services.yml
services:
_defaults:
autowire: true
...\Service\:
resource: ...\Service
2. Create new class - custom repository:
use Doctrine\ORM\EntityManagerInterface;
class YourRepository
{
private $repository;
public function __construct(EntityManagerInterface $entityManager)
{
$this->repository = $entityManager->getRepository(YourEntity::class);
}
public function find($id)
{
return $this->repository->find($id);
}
}
3. Use in any Controller or Service like this
class dsdsf
{
private $yourRepository;
public function __construct(YourRepository $yourRepository)
{
$this->yourRepository = $yourRepository;
}
public function create()
{
$id = 10;
$this->yourRepository->find($id);
}
}
Do you want to see more code and pros/cons lists?
Check my post How to use Repository with Doctrine as Service in Symfony.
ReferenceURL : https://stackoverflow.com/questions/8342031/symfony2-use-doctrine-in-service-container
'program tip' 카테고리의 다른 글
개발 포드 변경 사항을 다시 빌드하는 방법은 무엇입니까? (0) | 2021.01.08 |
---|---|
null은 무엇입니까! (0) | 2021.01.08 |
SQL Server Management Studio에서 SQLCMD 모드 란 무엇입니까? (0) | 2021.01.07 |
Flask와 함께 Google OAuth2 사용 (0) | 2021.01.07 |
Python 람다의 로컬 값 바인딩 (0) | 2021.01.07 |