Hallo Kurze Frage über Dependency InjectionPHP Dependency Injection und Vererbung
Ich verwende symfony 3 und komme sich mit DI
Sagen wir, ich habe eine Klasse
use Doctrine\ORM\EntityManagerInterface;
class CommonRepository
{
/**
* @var EntityManagerInterface
*/
protected $em;
/**
* DoctrineUserRepository constructor.
* @param EntityManagerInterface $em
*/
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public function getEntityManager()
{
return $this->em;
}
}
Jetzt eine neue Klasse namens UserRepository und ich injiziere die oben genannte Klasse, bedeutet das, dass ich auf die injizierten Items zugreifen kann (eindeutig hat er am Ende der Einführung geträumt)?
class UserRepository
{
/**
* @var CommonDoctrineRepository
*/
private $commonRepository;
/**
* @var \Doctrine\ORM\EntityManagerInterface
*/
private $em;
/**
* DoctrineUserRepository constructor.
* @param CommonRepository $CommonRepository
*/
public function __construct(CommonRepository $CommonRepository)
{
$this->commonRepository = $commonRepository;
$this->em = $this->commonRepository->getEntityManager();
}
public function find($id)
{
//does not seem to work
//return $em->find($id);
//nor does
//return $this->em->find($id);
}
}
auch wenn ich die Klasse erweitern und dann versuchen, Eltern keine Freude zu konstruieren, klar kann ich spritzen nur die Lehre Manager in die UserRepository, ich habe nur versucht, ein gewisses Verständnis um DI zu erhalten und Erbe
class UserRepository extends CommonRepository
{
/**
* @var CommonDoctrineRepository
*/
private $commonRepository;
/**
* @var \Doctrine\ORM\EntityManagerInterface
*/
private $em;
public function __construct(CommonDoctrineRepository $commonRepository, $em)
{
parent::__construct($em);
$this->commonRepository = $commonRepository;
}
}
für die symfony Komponente I Dienste wie
app.repository.common_repository:
class: AppBundle\Repository\Doctrine\CommonRepository
arguments:
- "@doctrine.orm.entity_manager"
app.repository.user_repository:
class: AppBundle\Repository\Doctrine\UserRepository
arguments:
- "@app.repository.common_repository"
Dank Wouter, also wenn Sie etwas über den Konstruktor übergeben, können Sie auf alles von der Klasse zugreifen, die übergeben wird, einschließlich was auch immer es konstruiert? – hounded
Ja, Sie sind richtig. –