turk porno porno escort rokettube
Ergebnis 1 bis 6 von 6

Thema: Entities im Controller aufrufen

  1. #1
    Neuer Benutzer
    Registriert seit
    03.03.2013
    Beiträge
    11
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard Entities im Controller aufrufen

    Hi@all,
    Ich komme am besten ohne große Umschweife gleich zur Sache.
    In allen Tutorials, die ich bis jetzt gelesen habe, werden die Entities direkt im Controller (genauer gesagt dessen Action) aufgerufen z.B. so:
    PHP-Code:
    $entity = new \Module\Entity\Entity();
    $entity->setIrgendwas($irgendwas);
    // usw... 
    Allerdings ist es ja nicht unbedingt die beste Lösung den Controller so von der Entity abhängig zu machen, daher meine Frage,
    was ist die beste Methode, die Entity im Controller aufzurufen?

    Was ich mir überlegt habe ist, die Entity dem ServiceManager bekannt zu machen und diese dann über eine Factory in den Controller zu injizieren aber eine Entity ist ja kein Service, daher ist das wohl auch nicht die beste Lösung.

  2. #2
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von Sunny Beitrag anzeigen
    In allen Tutorials, die ich bis jetzt gelesen habe, werden die Entities direkt im Controller (genauer gesagt dessen Action) aufgerufen
    Hier nicht: ZF-Doku: In-depth tutorial for beginners - Making use of Forms and Fieldsets

    Diesen Weg kann man auch empfehlen.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  3. #3
    Neuer Benutzer
    Registriert seit
    03.03.2013
    Beiträge
    11
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Dankeschön für deine Antwort und dem geposteten Link, das hat mir weiter geholfen.
    OK, dem Tutorial entnehme ich, dass man die Entity überhaupt nicht direkt im Controller aufrufen, sondern alle Zugriffe darauf in einem Service auslagern sollte oder hab ich da was falsch verstanden?

  4. #4
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von Sunny Beitrag anzeigen
    OK, dem Tutorial entnehme ich, dass man die Entity überhaupt nicht direkt im Controller aufrufen, sondern alle Zugriffe darauf in einem Service auslagern sollte oder hab ich da was falsch verstanden?
    Wenn du nochmals in das Tutorial schaust, dann wirst du feststellen, dass in der Service-Klasse überhaupt nichts zu „Entity“ steht. Der „Mapper“ übernimmt die Aufgabe – genau dafür ist er da. Egal woher die Daten kommen, der „Mapper“ erzeugt Objekte für unsere Anwendung daraus. Kurz gesagt: „der Mapper mappt“

    Das würde dann natürlich auch für das Erstellen von Objekten so gelten: (wenn man es denn überhaupt braucht!)
    PHP-Code:
    public function create()
    {
        return clone 
    $this->postPrototype;

    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  5. #5
    Neuer Benutzer
    Registriert seit
    03.03.2013
    Beiträge
    11
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    OK... Dann hab ich das jetz verstanden (glaub ich).
    Wenn ich nun z.B. Doctrine nutze, dann würde ja die Erstellung eines eigenen Mappers wegfallen, ansonsten müsste alles soweit gleich bleiben.

    Aber wie nutze ich nun am besten den EntityManager von Doctrine innerhalb eines Services?
    Ich habe hier jetzt mal ein Beispiel:
    PHP-Code:
    <?php
    namespace Blog\Service;

    use 
    Doctrine\ORM\EntityManagerInterface;

    class 
    ArticleService implements ArticleServiceInterface
    {

        protected 
    $entityManager;
        
        public function 
    findOneBy($key$value)
        {
            return 
    $this->entityManager->getRepository('Blog\Entity\Article')->findOneBy(array($key => $value));
        }

        public function 
    save($article)
        {
            
    $this->entityManager->persist($article);
            
    $this->entityManager->flush();
        }

        public function 
    findAll()
        {
            return 
    $this->entityManager->getRepository('Blog\Entity\Article')->findAll();
        }
        
        public function 
    __construct(EntityManagerInterface $entityManager){
            
    $this->entityManager $entityManager;
        }
    }

    ?>
    Das Problem liegt jetzt nur darin, dass dieser ArticleService aufgrund der getRepository-Methode des EntityManagers immernoch von dem Entity "Article" abhängig ist.
    Was wäre denn die best practice in diesem Fall?

  6. #6
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von Sunny Beitrag anzeigen
    dass dieser ArticleService aufgrund der getRepository-Methode des EntityManagers immernoch von dem Entity "Article" abhängig ist.
    Du gehst hier zu weit: Die Klasse heißt „ArticleService“ und damit kann und muss diese von einem „Article“ wissen.

    Wie bei dir aber schon zu erkennen ist, steht in deiner Service-Klasse nichts von:
    PHP-Code:
    new \Blog\Entity\Article“ 
    oder ähnlichem. Dies ist ausgelagert in den „EntityManager“.

    Damit sind wir auch wieder bei deiner Ausgangsfrage: kein direkter Aufruf.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

Ähnliche Themen

  1. Im Controller ein Modul aufrufen
    Von projumper im Forum Einsteigerfragen
    Antworten: 12
    Letzter Beitrag: 13.12.2011, 00:38
  2. Antworten: 3
    Letzter Beitrag: 16.12.2010, 18:01
  3. Aus JS einen Controller aufrufen
    Von zaratozom im Forum Javascript + RIA
    Antworten: 3
    Letzter Beitrag: 08.10.2010, 00:41
  4. viewHelper in Controller aufrufen
    Von ezahou im Forum MVC
    Antworten: 2
    Letzter Beitrag: 19.02.2009, 21:34
  5. Mehrere Controller aufrufen
    Von derwebhirsch im Forum MVC
    Antworten: 23
    Letzter Beitrag: 05.12.2007, 19:13

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •