• 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