turk porno porno escort rokettube
Ergebnis 1 bis 5 von 5

Thema: ZF2 Album-Beispiel um Tracks erweitern

  1. #1
    Benutzer
    Registriert seit
    12.08.2007
    Ort
    Münster
    Beiträge
    46
    Thanks
    0
    Thanked 1 Time in 1 Post

    Standard ZF2 Album-Beispiel um Tracks erweitern

    Hi zusammen,

    im ZF2 Einstiegstutorial wird in "Datase and models" ein Table Data Gateway Pattern aufgesetzt, so dass eine AlbumTable Klasse auf Basis von Zend\Db\TableGateway\TableGateway und ein Album Objekt als Entity erstellt werden. Dann werden das TableGateway und die AlbumTable über den ServiceManager verfügbar gemacht und miteinander verbunden.

    Möchte man jetzt z.B. noch Tracks eines Albums in der Datenbank haben, kann man wieder das gleiche Schema verwenden, um ein TrackTable mit Track Objekten zu bekommen. Gezielt Tracks abzufragen wäre damit im Controller möglich.

    Da die Tracks aber zu einem Album gehören, fände ich es schöner, wenn ich sie über das Album Objekt abfragen könnte. Darum würde ich gerne auf TrackTable im Album Model zugreifen. Aber dort ist der ServiceManager nicht wie im Controller verfügbar und es würde auch eine zusätzliche Abhängigkeit erzeugen, die man wohl lieber vermeidet.

    Wie wäre das sinnvollste Vorgehen, um etwas in der Form $album->getAllTracks() möglich zu machen? Oder anders: Wie bekomme ich das TrackTable / Gateway in die Album-Klasse?

    Balu

  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 balu Beitrag anzeigen
    Darum würde ich gerne auf TrackTable im Album Model zugreifen.
    Leider ganz falsch, denn die Klasse „TrackTable“ hat nichts in einem Album zu suchen! Dort gehören nur die Daten zum Album selbst (Titel, Interpret usw.) hinein und die Tracks.

    Zitat Zitat von balu Beitrag anzeigen
    Aber dort ist der ServiceManager nicht wie im Controller verfügbar…
    Schon im Kontroller ist dieser überflüssig!
    Ziel sollte es sein, dass du nur in den Fabriken („Factories“) auf den „ServiceManager“ („Service Locator“) zugegriffen wird.

    Zitat Zitat von balu Beitrag anzeigen
    …und es würde auch eine zusätzliche Abhängigkeit erzeugen, die man wohl lieber vermeidet.
    „Lieber vermeiden“? Absolut meiden!

    Zitat Zitat von balu Beitrag anzeigen
    Wie wäre das sinnvollste Vorgehen, um etwas in der Form $album->getAllTracks() möglich zu machen?
    Hier kann man verschiedene Ansätze fahren. Leider ist der Ansatz mit „AlbumTable“ und „TrackTable“ nicht sehr hilfreich, sobald es um Erweiterungen geht. Denn es fehlt eine Stelle, an der die Alben mit den zugehörigen Titeln zusammengeführt werden. Zusätzlich wird die Klasse „AlbumTable“ auch noch direkt im Kontroller verwendet.
    Man könnte natürlich die Klasse „TrackTable“ in der „AlbumTable“ verfügbar machen, aber das entführt die Idee der Klasse nur auf die jeweiligen Datenbanktabelle zuzugreifen.
    Probiere es doch so mal aus, dann entfernen wir uns nicht so weit vom Tutorial.

    Danach empfehle ich dir aber unbedingt das zweite Tutorial: „In-depth tutorial for beginners“ aus der Doku. Hier lernst du einen weiteren Ansatz mit mehr Erläuterungen. Sehr hilfreich, gerade wenn man den Vergleich zwischen dem ersten und zweiten Tutorial zieht.

    Zitat Zitat von balu Beitrag anzeigen
    Oder anders: Wie bekomme ich das TrackTable / Gateway in die Album-Klasse?
    Gehört da nicht hin! Verabschiede dich von dem Gedanken.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

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

    Standard

    Weiteres Ziel, welches man verfolgen sollte: (Was im ersten Tutorial der Doku noch anders gelöst wird)

    Standard-Modul-Klassen sollten immer so aussehen:
    PHP-Code:
    namespace Foobar;

    use 
    Zend\ModuleManager\Feature\ConfigProviderInterface;

    class 
    Module implements ConfigProviderInterface
    {

        
    /**
         * Returns configuration to merge with application configuration
         *
         * @return array|\Traversable
         */
        
    public function getConfig()
        {
            return include 
    __DIR__ '/config/module.config.php';
        }

    Mehr muss da nicht rein!
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  4. #4
    Benutzer
    Registriert seit
    12.08.2007
    Ort
    Münster
    Beiträge
    46
    Thanks
    0
    Thanked 1 Time in 1 Post

    Standard

    Zitat Zitat von Kaiuwe Beitrag anzeigen
    Leider ganz falsch, denn die Klasse „TrackTable“ hat nichts in einem Album zu suchen! Dort gehören nur die Daten zum Album selbst (Titel, Interpret usw.) hinein und die Tracks.
    Also würde man statt des TableGateways etwas nutzen, das sowohl die Album- als auch die Trackdaten aus der Datenbank liest und in das Album schreibt?

    Zitat Zitat von Kaiuwe Beitrag anzeigen
    Schon im Kontroller ist dieser überflüssig!
    Ziel sollte es sein, dass du nur in den Fabriken („Factories“) auf den „ServiceManager“ („Service Locator“) zugegriffen wird.
    Also ist schon das "public function getAlbumsTable()" im Controller aus dem Tutorial eine blöde Idee? Ich hatte es so verstanden, dass der Service Locator dazu genutzt wird, an die jeweiligen Fabriken zu kommen. Mir fehlt dort auch eine Erklärung, was denn nun der eigentliche Sinn des Service Locators ist.

    Zitat Zitat von Kaiuwe Beitrag anzeigen
    Danach empfehle ich dir aber unbedingt das zweite Tutorial: „In-depth tutorial for beginners“ aus der Doku. Hier lernst du einen weiteren Ansatz mit mehr Erläuterungen. Sehr hilfreich, gerade wenn man den Vergleich zwischen dem ersten und zweiten Tutorial zieht.
    Ich versuche gerade das xte Mal ins ZF2 reinzukommen. Mit dem ZF selbst habe ich vor langer Zeit mal gespielt, bin aber nicht richtig warm damit geworden. Ähnliches passiert jetzt wieder mit dem ZF2. Grundsätzlich verstehe ich den Ablauf des Tutorials, auch wenn ich zwischendurch denke, dass ich das vermutlich anders gelöst hätte. Folge ich dem Vorgehen des Tutorials, lande ich dann später immer wieder in irgendwelchen Sackgassen, die mir die Lust nehmen mich tiefer damit zu beschäftigen.

    Mal schauen, ob mir das In-depth tutorial mich da besser an die Hand nimmt.

    Zitat Zitat von Kaiuwe Beitrag anzeigen
    Weiteres Ziel, welches man verfolgen sollte: (Was im ersten Tutorial der Doku noch anders gelöst wird)

    Standard-Modul-Klassen sollten immer so aussehen:
    PHP-Code:
    namespace Foobar;

    use 
    Zend\ModuleManager\Feature\ConfigProviderInterface;

    class 
    Module implements ConfigProviderInterface
    {

        
    /**
         * Returns configuration to merge with application configuration
         *
         * @return array|\Traversable
         */
        
    public function getConfig()
        {
            return include 
    __DIR__ '/config/module.config.php';
        }

    Mehr muss da nicht rein!
    Also kein onBootstrap(), kein getAutoloaderConfig(), kein getServiceConfig()? Warum wird das im Tutorial dann so gemacht? Jeder, der neu mit dem ZF2 anfängt, wird so erst einmal auf die "schiefe Bahn" geschoben um hinterher zu lernen, dass man das so alles gar nicht machen sollte. Da ist es ja fast sogar gut, dass nicht auch noch erklärt wird, wieso das alles so zusammenhängt... *seufz*

  5. #5
    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 balu Beitrag anzeigen
    Also würde man statt des TableGateways etwas nutzen, das sowohl die Album- als auch die Trackdaten aus der Datenbank liest und in das Album schreibt?
    Richtig.
    Es könnten dabei auch zwei „TableGateway“-Objekte in einer Klasse verwendet werden, das wäre nicht das Problem. Im Tutorial heißt die Klasse „AlbumTable“ und dies weißt auf eine Datenbanktabelle hin, daher mein Einwand, dass dieser Konstrukt unpassend ist.


    Zitat Zitat von balu Beitrag anzeigen
    Also ist schon das "public function getAlbumsTable()" im Controller aus dem Tutorial eine blöde Idee?
    Richtig.

    Zitat Zitat von balu Beitrag anzeigen
    Ich hatte es so verstanden, dass der Service Locator dazu genutzt wird, an die jeweiligen Fabriken zu kommen.
    Wie das Objekt erstellt wird, ist uninteressant, denn das musst du nicht wissen und schon gar nicht der Kontroller. Das dabei eventuell eine Fabrik für die Erstellung verwendet wird, ist ebenfalls irrelevant.

    Das ZF regelt für dich den korrekten Aufruf des Kontrollers und der entsprechenden Aktion. Wie dies passiert, gibst du bereits an:
    PHP-Code:
    'controllers' => array(
        
    'invokables' => array(
            
    'Album\Controller\Album' => 'Album\Controller\AlbumController',
        ),
    ), 
    Wie es bereits da steht, wird der Kontroller direkt aufgerufen („invoke“). Der „Service Manager“ nutzt nun diese Konfiguration/Wissen, um den Kontroller für dich zu erstellen.
    Jetzt kannst du dem „Service Manager“ aber auch mitteilen, dass dieser deinen Kontroller nicht mehr direkt aufrufen soll, sondern das eine Fabrik zum Erstellen verwendet wird:
    PHP-Code:

    'controllers' => array(
        
    'factories' => array(
            
    'Album\Controller\Album' => 'Album\Controller\AlbumControllerFactory',
        ),
    ), 
    Das heißt also, nur der „Service Manager“ muss wissen wie etwas erstellt wird, denn von diesem bekommst du dein „fertiges“ Objekt.

    Mit einer Fabrik kann dein Kontroller inklusive dem Objekt „AblumTable“ dann bereits fertig erstellt werden. Es muss nichts mehr irgendwo hergeholt werden. Wo es herkommt ist somit wirklich egal und uninteressant – die Abhängigkeiten sind damit auch gleich noch reduziert.

    Zitat Zitat von balu Beitrag anzeigen
    Folge ich dem Vorgehen des Tutorials, lande ich dann später immer wieder in irgendwelchen Sackgassen, die mir die Lust nehmen mich tiefer damit zu beschäftigen.
    Das ZF ist gar nicht so schwer, denn es macht nicht „Neues“ oder etwas anders.
    Gehe nach dem Prinzip wie im zweiten Tutorial. Wenn du das verstanden hast, bekommst du alles hin.

    Es lohnt sich aber auf jeden Fall. Mit Sackgassen einfach hier melden.

    Zitat Zitat von balu Beitrag anzeigen
    Also kein onBootstrap(), kein getAutoloaderConfig(), kein getServiceConfig()? Warum wird das im Tutorial dann so gemacht?
    Es gibt viele Wege, denn immerhin reden wir hier über ein Framework und jeder kann es so verwenden wie er möchte.

    Lässt du aber die Modul-Klasse so einfach wie in meinem Beispiel, wird es nach hinten raus viel einfacher.

    Zitat Zitat von balu Beitrag anzeigen
    Jeder, der neu mit dem ZF2 anfängt, wird so erst einmal auf die "schiefe Bahn" geschoben um hinterher zu lernen, dass man das so alles gar nicht machen sollte.
    „Schiefe Bahn“ ist es nicht, denn es funktioniert am Ende. Auf weite Sicht, sollte man es sich aber am Anfang schon einfacher machen.

    Zitat Zitat von balu Beitrag anzeigen
    Da ist es ja fast sogar gut, dass nicht auch noch erklärt wird, wieso das alles so zusammenhängt... *seufz*
    Ich denke es gibt hier zwei Punkte die kollidieren:

    1. Das ZF wendet sich an erfahrene Programmierer.
    2. Viele „unerfahrene“ Programmierer wollen aber auch gern damit arbeiten.


    Ich meine das nicht negativ, dass ist nur eine Tatsache der sich das ZF stellen muss.
    Zusätzlich greift auch noch das Thema „Open Source“ an dieser Stelle. Auch genau bei diesem Tutorial: Niemand meldet Unzulänglichkeiten oder Unklarheiten an offizieller Stelle. Aber wie soll da das Tutorial besser werden, wenn für Anfänger unklare Dinge nicht aufgedeckt bzw. gemeldet werden?

    Einen Rat würde ich dir auch noch geben: Lies den Quellcode und versuch zu verstehen, was intern bewerkstelligt wird – schon fällt die Anwendung viel einfacher.
    Geändert von Kaiuwe (05.08.2015 um 15:59 Uhr)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

Ähnliche Themen

  1. Tracklist für Album - ZF2-Tutorial
    Von Pavenstaedter im Forum ZF2 Einsteigerfragen
    Antworten: 1
    Letzter Beitrag: 29.12.2013, 12:38
  2. ZF2: Unit-Tests ohne ZF2 - Ausgabe für coverage-html
    Von rainman1983 im Forum Testing & Deployment
    Antworten: 2
    Letzter Beitrag: 13.12.2013, 16:10
  3. ZF2 Module außerhalb von ZF2 MVC nutzen
    Von cSteusloff im Forum ZF2 Einsteigerfragen
    Antworten: 5
    Letzter Beitrag: 23.10.2013, 13:36
  4. [ZF2] ZF2's View - Some thoughts for discussion
    Von Kaiuwe im Forum Ankündigungen
    Antworten: 0
    Letzter Beitrag: 10.06.2011, 16:04
  5. Antworten: 2
    Letzter Beitrag: 24.11.2009, 16:05

Lesezeichen

Berechtigungen

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