• Jeder User im Forum verpflichtet sich zur Akzeptanz und zur Einhaltung dieser Regeln:
    1. Umgangston
      Ein angemessener höflicher Umgangston, ohne Beleidigungen, Beschimpfungen und aggressive Postings ist für jedes Mitglied Pflicht.
    2. Beiträge
      Jedes Mitglied sollte sich bemühen nur sinnvolle Beiträge zum Thema zu posten. Dabei ist unbedingt vorher zu prüfen, ob das Thema vorher schon einmal diskutiert wurde und daher fortgesetzt werden kann
      • Suchfunktion benutzen!
      • offizielle Doku lesen!
    3. Haftung
      Jeder Beitragsersteller übernimmt die alleinige Verantwortung seiner Inhalte.
    4. Werbung
      Wir erlauben keine Beiträge, Signaturen, Private Nachrichten oder eMails an Benutzer, die Werbung enthalten. Ausgenommen
      sind Stellengesuche /-angebote, welche ausschließlich im Forum "Stellengesuche" veröffentlicht werden dürfen.
    5. Verstöße
      Regelwidrige Beiträge sollten dem Team gemeldet werden. Nach deren Überprüfung werden wir schnellstmöglich
      entsprechend handeln.
    6. Authorität
      Den Anweisungen der Team-Mitglieder (Administratoren und Moderatoren) sind in diesem Forum Folge zu leisten.
      Bei Fragen oder Beschwerden bitte an diese wenden.
    Wir möchten Euch darauf aufmerksam machen, dass es bei Verstößen gegen einen oder mehreren der oben genannten
    Punkte dem Team frei steht entsprechend zu handeln. Dies kann z.B. das Löschen eines Beitrags, das Ausschliessen bzw.
    Sperren von Mitgliedern oder aber lediglich eine Verwarnung sein.

    In diesem Zusammenhang sollte erwähnt werden, dass das Forum automatisch die IP-Adresse jedes Beitrag-Erstellers
    speichert. Bei schweren Vergehen, behalten wir es uns vor, die IP-Adresse zur Strafverfolgung weiterzugeben.
  • Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

Array aus einem Objekt erstellen -> wie?

Frau Bauer

New member
Hallo,

ich habe hier eine Objekt, aus dem ich gerne ein Array machen würde, um es in JSON zu wandeln.

Was sieht das ZF2 hierfür für Möglichkeiten vor?

Oder ist es möglich ein Objekt direkt in JSON zu wandeln? :cool:

Danke.
 

Frau Bauer

New member
Den habe ich mir in der Doku für das ZF2 schon angesehen. Aber ehrlich gesagt: Ich steige da nicht ganz durch. Mir fehlt ein griffiges Beispiel.
Dein Link führt mich (nach einem Weizen) erkennbar nur zu einer Seite ohne Doku.
Hab ich mir angeschaut und auch in meiner Klasse impementiert. Aber irgendwie begreife ich auch hier nicht ganz den Zusammenhang.

Mal ein Beispiel, wie ich es in meiner Klasse (bzw. Methode), die ein Report-Objekt zurückt gibt, implementiert habe ($this->_array = new ArrayObject()):

PHP:
public function getReportFromReportId( $reportId ) {
   $this->setReportId( $reportId );
   $reportAssignment = $this->setupReportAssignment();
   $report           = $this->getReportTable()->fetchReportById( $reportAssignment );
   
   return json_encode(new ArrayValue($report), JSON_PRETTY_PRINT);
}

public function jsonSerialize() {
   return $this->_array;
}
 

Frau Bauer

New member
Hallo Kaiuwe und alle anderen,

kann mir jemand mal ein konkretes Beispiel für die Implementierung des Hydrators aus dem ZF2 geben? Viel verlangt. Ich weiß. Aber ich probiere schon zwei Tage rum und die Zeit wird immer knapper.

Hier mal mein Model, von dessen Objekt ich ein Array benötige:

PHP:
<?php

namespace Speedy\Model;

class Report
{
    
    
    protected $_reportId;
    protected $_description;
    protected $_statement;
   
   /**
    * @param mixed $reportId
    */
   public function setReportId( $reportId ) {
      $this->_reportId = $reportId;
   }
   
   /**
    * @return mixed
    */
   public function getReportId() {
      return $this->_reportId;
   }
   
   /**
    * @param mixed $description
    */
   public function setDescription( $description ) {
      $this->_description = $description;
   }
   
   /**
    * @return mixed
    */
   public function getDescription() {
      return $this->_description;
   }
   
   /**
    * @param mixed $statement
    */
   public function setStatement( $statement ) {
      $this->_statement = $statement;
   }
   
   /**
    * @return mixed
    */
   public function getStatement() {
      return $this->_statement;
   }
   
   public function exchangeArray($data)
   {
      $this->setReportId(( ! empty($data['ReportID'])) ? $data['ReportID'] : null);
      $this->setDescription(( ! empty($data['Description'])) ? $data['Description'] : null);
      $this->setStatement(( ! empty($data['Statement'])) ? $data['Statement'] : null);
   }
 
}
Herzlichen Dank im Voraus.
 

Kaiuwe

Super-Moderator
kann mir jemand mal ein konkretes Beispiel für die Implementierung des Hydrators aus dem ZF2 geben?
Ich glaube, du hast etwas falsch verstanden, denn es muss gar nichts in dein Objekt implementiert werden.

Beispiel:
PHP:
$report   = new Report();
$report->setReportId('Foo');
$report->setDescription('Bar');
$report->setStatement('Baz');

$hydrator = new \Zend\Hydrator\ClassMethods();
$data     = $hydrator->extract($report); // $data enthält das gewünschte Array
Das ist alles! Du brauchst keine Methode „exchangeArray“ oder etwas anderes in deinem Objekt.

Umgedreht funktioniert es ebenfalls:
PHP:
$hydrator->hydrate($data, $report);
Und damit ist dein Objekt „gefüllt“.

Wenn du zend-db mit der Klasse „TableGateway“ verwendest, dann erstelle diese mit „Zend\Db\ResultSet\HydratingResultSet“ und du bekommst deine Objekt gefüllt mit den Daten aus der Datenbank.
 

Frau Bauer

New member
Ich glaube, du hast etwas falsch verstanden, denn es muss gar nichts in dein Objekt implementiert werden.

Beispiel:
PHP:
$report   = new Report();
$report->setReportId('Foo');
$report->setDescription('Bar');
$report->setStatement('Baz');

$hydrator = new \Zend\Hydrator\ClassMethods();
$data     = $hydrator->extract($report); // $data enthält das gewünschte Array
Das ist alles!
Mannmannmann. Ohmannonomann.
Einfacher gehts ja nun wirklich nicht. :eek:
Warum muss das in der Doku so kompliziert erklärt sein.

Du brauchst keine Methode „exchangeArray“ oder etwas anderes in deinem Objekt.
Die habe ich halt aus dem Album-Beispiel übernommen, da sie ja für die Formularverarbeitung gebraucht wird, oder etwa nicht?
 

Kaiuwe

Super-Moderator
Die habe ich halt aus dem Album-Beispiel übernommen, da sie ja für die Formularverarbeitung gebraucht wird, oder etwa nicht?
Nein, wird nicht gebraucht, denn auch dem Formular kannst du mitteilen, welchen Hydrator du verwenden möchtest. Dieser wird dann verwendet um die Daten zu extrahieren und den entsprechenden Formularfeldern zuzuweisen bzw. um die Formulardaten wieder an das Objekt zu übergeben.
 
Oben