turk porno porno escort rokettube
Ergebnis 1 bis 3 von 3

Thema: Di erstellt keine neue Instanz für Abhängigkeiten

  1. #1
    Neuer Benutzer
    Registriert seit
    13.11.2013
    Beiträge
    9
    Thanks
    0
    Thanked 3 Times in 1 Post

    Standard Di erstellt keine neue Instanz für Abhängigkeiten

    Hey Leute,

    ich hoffe ich bin hier in der Richtigen Kategorie >.<
    Ich habe folgendes Problem:

    Ich habe ein Hauptobjekt mit verschachtelten Abhängigkeiten (Maschine->Preis->Incoterm), leider wird aber für den Incoterm keine neue Instanz erzeugt... Ich hab es erst über hard-coding im __construct versucht klappte nicht dann habe ich es mit Di versucht klappt auch nicht. Hier mal ein Beispl:

    Code:
    public function onBootstrap($e)
        {
            $di = new Di();
            $di->instanceManager()->setParameters('MaschinenManager\Model\Entity\Preis', array(
                'Incoterm'      => new Incoterm(),
                'OrigIncoterm'  => new Incoterm(),
            ));
            $di->instanceManager()->setParameters('MaschinenManager\Model\Entity\Maschine', array(
                'Kateogie'          => new Kategorie(),
                'Typ'               => new Typ(),
                'Serie'             => new Serie(),
                'SerieBaureihe'     => new SerieBaureihe(),
                'HaendlerPreis'     => $di->newInstance('MaschinenManager\Model\Entity\Preis'),
                'QuellePreis'       => $di->newInstance('MaschinenManager\Model\Entity\Preis'),
                'Vk1Preis'          => $di->newInstance('MaschinenManager\Model\Entity\Preis'),
                'Vk2Preis'          => $di->newInstance('MaschinenManager\Model\Entity\Preis'),
                'HaendlerKontakt'   => new Kontakt(),
                'QuelleKontakt'     => new Kontakt(),
                'EkBeiKauf'         => $di->newInstance('MaschinenManager\Model\Entity\Preis'),
    
    
            ));
            $a = $di->newInstance('MaschinenManager\Model\Entity\Preis');
            $b = $di->newInstance('MaschinenManager\Model\Entity\Preis');
            var_dump($a);
            var_dump($b);
        }
    dabei kommt dann folgendes raus(IDs werden für das beispl. per rand(1, 100) im __construct erstellt)
    Code:
    object(MaschinenManager\Model\Entity\Preis)[413]  
     protected 'id' => null 
     .
     .
     .
     protected 'Incoterm' => object(MaschinenManager\Model\Entity\Incoterm)[352]
          protected 'id' => int 90
    
    
    object(MaschinenManager\Model\Entity\Preis)[412]
     protected 'id' => null
     .
     .
     .
     protected 'Incoterm' => object(MaschinenManager\Model\Entity\Incoterm)[352]
          protected 'id' => int 90
     
    hier nochmal ein kleiner ausschnitt aus der Preis-Klasse:
    Code:
    public function __construct(Incoterm $Incoterm, Incoterm $OrigIncoterm)
        {
            $this->Incoterm = $Incoterm;
            $this->OrigIncoterm = $OrigIncoterm;
            $this->Incoterm->id = rand(1, 100);
        }
    
    
        public function exchangeArray($data)
        {
            $this->id = (!empty($data['ID'])) ? $data['ID'] : null;
            $this->betrag = (!empty($data['Betrag'])) ? $data['Betrag'] : null;
            $this->waehrungISO = (!empty($data['WaehrungISO'])) ? $data['WaehrungISO'] : null;
            $this->origBetrag = (!empty($data['OrigBetrag'])) ? $data['OrigBetrag'] : null;
            $this->origWaehrungISO = (!empty($data['OrigWaehrungISO'])) ? $data['OrigWaehrungISO'] : null;
            $this->alternativWaehrungISO = (!empty($data['AlternativWaehrungISO'])) ? $data['AlternativWaehrungISO'] : null;
            $this->Incoterm->id = (!empty($data['IncotermID'])) ? $data['IncotermID'] : null;
            $this->Incoterm->zusatz = (!empty($data['IncotermZusatz'])) ? $data['IncotermZusatz'] : null;
            $this->notizen = (!empty($data['Notizen'])) ? $data['Notizen'] : null;
            $this->OrigIncoterm->id = (!empty($data['OrigIncotermID'])) ? $data['OrigIncotermID'] : null;
            $this->OrigIncoterm->zusatz = (!empty($data['OrigIncotermZusatz'])) ? $data['OrigIncotermZusatz'] : null;
            $this->erstelltAm = (!empty($data['ErstelltAm'])) ? $data['ErstelltAm'] : null;
            $this->erstelltVon = (!empty($data['ErstelltVon'])) ? $data['ErstelltVon'] : null;
        }
    Normalerweise werden die Objekte per Gateway als ResultSet geladen, dort besteht aber das gleiche problem... AUßER ich führe das "new Incoterm" in der exchangeArray() methode aus DANN wird tatsächlich eine neue Instanz erzeugt.

    Was mache ich falsch >.<*

    Viele Grüße

  2. The Following 3 Users Say Thank You to Kevin Bintzik For This Useful Post:

    acanadaparkas (20.05.2014), naracinapabl (22.05.2014), suggmenstiffany (22.05.2014)

  3. #2
    Benutzer
    Registriert seit
    30.05.2009
    Ort
    München
    Beiträge
    84
    Thanks
    0
    Thanked 37 Times in 14 Posts

    Standard

    Wieso willst du diese Instanzen in der onBootstrap Methode erzeugen?
    Sind die SO essenziell, dass du die über das komplette Modul hinweg benötigst? Kann ich mir kaum vorstellen ...
    Oder ist das bloß quick 'n' dirty dev code? Selbst dann isses... naja, .. wo anders besser aufgehoben!

    Du könntest dein Incoterm Objekt clonen, dann wäre dein konkretes Problem wohl gelöst, aber schön ist was anderes ...
    Wieso eigentlich Zend\Di ? Hat das nen Grund?

    Für Produktivumgebungen wird von allen Seiten von Zend\Di abgeraten. Fürs schnelle entwickeln ist es ok, aber ich weiß ja nicht was du damit vor hast... deshalb lieber nochmal drauf hingewiesen
    ZF2, Zend Di and Controllers for fast SOA development

  4. The Following 3 Users Say Thank You to michl For This Useful Post:

    acanadaparkas (22.05.2014), naracinapabl (22.05.2014), suggmenstiffany (23.05.2014)

  5. #3
    Benutzer
    Registriert seit
    30.05.2009
    Ort
    München
    Beiträge
    84
    Thanks
    0
    Thanked 37 Times in 14 Posts

    Standard

    Vergiss das mit dem clonen. Ich hab das gerade mal getestet (noch nie wirklich mit Zend\Di gearbeitet)

    Sobald du die Dependencies in der $di->newInstance übergibst funktioniert alles.
    PHP-Code:
    public function onBootstrap($e)
        {
            
    $di = new Di();
            
    $di->instanceManager()->setParameters('MaschinenManager\Model\Entity\Maschine', array(
                
    'Kateogie'          => new Kategorie(),
                
    'Typ'               => new Typ(),
                
    'Serie'             => new Serie(),
                
    'SerieBaureihe'     => new SerieBaureihe(),
                
    'HaendlerPreis'     => $di->newInstance('MaschinenManager\Model\Entity\Preis'),
                
    'QuellePreis'       => $di->newInstance('MaschinenManager\Model\Entity\Preis'),
                
    'Vk1Preis'          => $di->newInstance('MaschinenManager\Model\Entity\Preis'),
                
    'Vk2Preis'          => $di->newInstance('MaschinenManager\Model\Entity\Preis'),
                
    'HaendlerKontakt'   => new Kontakt(),
                
    'QuelleKontakt'     => new Kontakt(),
                
    'EkBeiKauf'         => $di->newInstance('MaschinenManager\Model\Entity\Preis'),


            ));
            
    $incoterm = new Incoterm;
            
    $a $di->newInstance(
                
    'MaschinenManager\Model\Entity\Preis',
                array(
                    
    'Incoterm'       => clone $incoterm,
                    
    'OrigIncoterm'  => clone $incoterm,
                )
            );
            
    $b $di->newInstance(
                
    'MaschinenManager\Model\Entity\Preis',
                array(
                    
    'Incoterm'      => clone $incoterm,
                    
    'OrigIncoterm'  => clone $incoterm,
                )
            );
            
    var_dump($a);
            
    var_dump($b);
        } 
    Irgendwie ist das Verhalten auf den ersten Blick etwas merkwürdig. Bin da aber auch nicht wirklich tief drin, wie bereits erwähnt.

    Für MaschinenManager\Model\Entity\Maschine muss das ganze dann natürlich auch angepasst werden.
    Falls du die dependencies tatsächlich über setParameters() handlen willst und nicht über newInstance(), dann empfehle ich dir einfach nochmal die Doku zu lesen.
    Da wirds bestimmt auch ne Möglichkeit geben. Halte mal nach dem $shared keyword ausschau.
    Geändert von michl (13.05.2014 um 03:47 Uhr)

  6. The Following 3 Users Say Thank You to michl For This Useful Post:

    acanadaparkas (22.05.2014), naracinapabl (22.05.2014), suggmenstiffany (23.05.2014)

Ähnliche Themen

  1. [Abhängigkeiten] setter vs. __construct
    Von JanMalte im Forum ZF2 Core
    Antworten: 7
    Letzter Beitrag: 21.03.2014, 03:04
  2. Abhängigkeiten und new Operator
    Von Yanko im Forum ZF2 Einsteigerfragen
    Antworten: 4
    Letzter Beitrag: 28.01.2014, 14:08
  3. Einzelne Elemente in Abhängigkeiten anzeigen
    Von warlock im Forum Formulare
    Antworten: 5
    Letzter Beitrag: 14.01.2011, 00:02
  4. Frage zu Abhängigkeiten zwischen Komponenten
    Von Marly im Forum Einsteigerfragen
    Antworten: 2
    Letzter Beitrag: 19.12.2010, 14:44
  5. Antworten: 0
    Letzter Beitrag: 23.02.2010, 15:24

Lesezeichen

Berechtigungen

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