Korzystanie z Symfony 2.7 i doktryny 2.5, mamGet repozytorium jednostką docelową z klasy abstrakcyjne w doktrynie 2,5
- Interface
Alsciende\MyBundle\Model\CycleInterface
- klasą abstrakcyjną
Alsciende\MyBundle\Entity\Cycle
który implementuje interfejs - końcowa klasa
AppBundle\Entity\Cycle
, która rozszerza klasę abstrakcyjną i implementuje interfejs - konfigurację doktryny z
resolve_target_entities
, która mapuje interfejs do ostatniej klasy
Ten system działa dobrze i udało mi się stworzyć bazę danych i wprowadzić trochę CRUD w AppBundle, bezpośrednio manipulując obiektem docelowym.
Jednak teraz chcę manipulować obiektem docelowym w MyBundle, poprzez interfejs. Muszę jej repozytorium:
$this->getDoctrine()->getRepository('Alsciende\MyBundle\Model\CycleInterface');
Ale pojawia się wyjątek
class 'Alsciende\MyBundle\Model\CycleInterface' does not exist
Jak mogę uzyskać repozytorium jednostki docelowej? To znaczy, w jaki sposób można wywołać bezpośrednio ResolveTargetEntityListener, aby uzyskać nazwę podmiotu implementującego interfejs?
edit:
Dlaczego muszę to? Bardzo prosto, na przykład, potrzebuję kontrolera, który wyświetla listę wszystkich Cykli. Interfejs określa, że każdy cykl ma identyfikator i nazwę. Chcę wyświetlić każdy cykl z jego nazwą i identyfikatorem. W tym celu muszę uzyskać dostęp do repozytorium rzeczywistych jednostek Cycle.
Alsciende/MyBundle/Model/CycleInterface.php
<?php
namespace Alsciende\MyBundle\Model;
interface CycleInterface
{
public function getId();
public function getName();
}
Alsciende/MyBundle/Controller/CycleController.php
<?php
namespace Alsciende\MyBundle\Controller;
class CycleController extends Controller
{
public function indexAction()
{
$cycles = $this
->getDoctrine()
->getRepository('Alsciende\MyBundle\Model\CycleInterface')
->findAll();
// return template with list $cycles
// using only id and name properties
}
}
To ten sam sposób, że FosUserBundle jest w stanie zarządzać Podmioty użytkownika, mimo że klasa Użytkownika zdefiniowana w FosUserBundle jest klasą abstrakcyjną.
Czy czytałeś o Dziedziczeniu doktryny? http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html –
Zrobiłem. Zastosowałem to, co jest w tej dokumentacji. – Alsciende
Czytałem, na innym pytaniu SO, że możesz tylko zapytać 'Doctrine' o coś, co może być utworzone ... Oczywiście, ani' interface' ani 'abstract class' nie mogą być. Może ktoś inny mógłby rozwinąć ten ... –