GORM für Einsteiger

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Antworten
Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: GORM für Einsteiger

Beitrag von dr.e. » 01.09.2011, 22:32:20

Vielen Dank für das Tutorial! Gute Arbeit. :)
Viele Grüße,
Christian

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: GORM für Einsteiger

Beitrag von Megger » 01.09.2011, 23:46:18

Was bedeutet das "&"?
Wenn du das & voranstellst, dann ändert sich der Wert der Variable auch außerhalb einer Funktion/Methode -> Call by Reference

In PHP4 war es noch wichtig anzugeben, dass du eine Referenz haben willst, aber in PHP5 wirst du das eigentlich nur noch bei den Übergabeparametern finden. Mehr fällt mir so spontan jetzt auch nicht ein
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 02.09.2011, 21:22:15

Der nächste Schritt soll dann das Laden und Darstellen der vorhandenen Autoren sein.

Hierzu bietet der GORM wohl mehrere Möglichkeiten und ich bin mir nicht sicher, ob ich mit meiner Wahl richtig liege. Da grundsätzlich alle Autoren ausgegeben werden sollen, dürfte das Laden mittels

Code: Alles auswählen

$select = 'SELECT * FROM ent_author; 
$User = $ORM->loadObjectByTextStatement('User,$select); 
am sinnvollsten sein. Liege ich mit dieser Vermutung richtig? Oder bietet sich hierfür eine einfachere Lösung an?

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: GORM für Einsteiger

Beitrag von dave » 02.09.2011, 21:26:08

ma2604121 hat geschrieben:Liege ich mit dieser Vermutung richtig? Oder bietet sich hierfür eine einfachere Lösung an?
An genau dem selben Punkt stand ich vor zwei Tagen auch. Da habe ich die Doku nochmal durchforstet aber nichts optimaleres gefunden. Da du ja keine bestimmten Kriterien hast, geht es so am einfachsten.

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 02.09.2011, 21:33:08

Ja, ich habe auch nichts anderes gefunden. Daher gehe ich davon aus, dass es für diesen Fall die beste Lösung ist.

Ob ich mich heute oder morgen noch die Umsetzung machen kann, bezweifle ich allerdings. Denke da wird es eher Sonntag. Sobald ich weiter bin, stelle ich es hier vor und wenn die Sache rund ist, wandert es ins Wiki.

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: GORM für Einsteiger

Beitrag von dave » 02.09.2011, 21:53:25

Respekt, du legst dich ordentlich ins Zeug! An Tagen/Abenden wie heute finde ich es auch immer sehr schade, dass der Tag nur 24 Stunden hat und ich "leider" noch einem anderen Job nachgehen muss ;)

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 02.09.2011, 21:55:21

Wem sagst Du das? Aber irgendwie möchte die knapp bemessene Freizeit sinnvoll genutzt werden.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: GORM für Einsteiger

Beitrag von Megger » 02.09.2011, 22:02:18

Du kannst es auch per

Code: Alles auswählen

$crit = new GenericCriterionObject();
$gorm->loadObjectListByCriterion('User', $crit);
 
machen, außerdem hat irgendwer mal eine Methode geschrieben, welche das laden von allen Datensätzen ermöglicht, ich weiß allerdings nicht, ob das schon eingebaut wurde, vielleicht solltest du mal im GenericORRelationMapper Quellcode schauen
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 02.09.2011, 22:30:33

Irgendetwas übersehe ich:

Die Templatedatei:

Code: Alles auswählen

<@controller namespace="books::pres::controller" file="AuthorsListController" class="AuthorsListController" @>
<h2>Available authors</h2>
<html:template name="AuthorsList">
    <td><template:placeholder name="AuthorName" /></td>
    <td><template:placeholder name="CreateDate" /></td>
</html:template> 
Der Controller:

Code: Alles auswählen

<?php
import('tools::link','FrontcontrollerLinkHandler');
import('modules::genericormapper::data','GenericDomainObject');
import('tools::http', 'HeaderManager');

class AuthorsListController extends base_controller{
    public function  transformContent() {
    $orm = $this->getMapper();
    $Crit = new GenericCriterionObject();
    $Crit->addPropertyIndicator('Author','%');
    $AuthorsList = $orm->loadObjectListByCriterion('Authors',$Crit);
    $template = &$this->getTemplate('AuthorsList');
    $buffer = '';
    foreach ($AuthorsList as $Author){
        $template->setPlaceHolder('AuthorName', $Author->getProperty('Author'));
        $template->setPlaceHolder('CreateDate', $Author->getProperty('CreationTimestamp'));
        $buffer .= $template->transformTemplate();
    }
    $this->setPlaceHolder('AuthorsList', $buffer);
    }

    private function getMapper(){
    $ormFact = &$this->getServiceObject('modules::genericormapper::data', 'GenericORMapperFactory');
    return $ormFact->getGenericORMapper('modules::gorm', 'books', 'books');
    }
}
?>
Dies führt zu der folgenden Fehlermeldung:

Code: Alles auswählen

Type: 	InvalidArgumentException
Message: 	[AuthorsListController::setPlaceHolder()] There are no placeholders found for name "AuthorsList" in document controller "AuthorsListController"!
Number: 	512
File: 	/var/www/apf_114_demo/apps/core/pagecontroller/pagecontroller.php
Line: 	2193 
Vielleicht bin ich einfach nur zu müde, um den Fehler zu sehen...

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: GORM für Einsteiger

Beitrag von Megger » 03.09.2011, 00:13:33

Dein Template heißt 'AuthorList' aber du hast keinen PlaceHolder 'AuthorList'
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 03.09.2011, 12:51:25

Code: Alles auswählen

    $this->setPlaceHolder('AuthorsList', $buffer); 
Da ist also der Fehler. Das Problem nun: Ich erhalte keine Ausgabe des Templates. Muss da nochmals eine extra Anweisung kommen, nachdem in der Schleife die Platzhalter ersetzt wurden?

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: GORM für Einsteiger

Beitrag von Megger » 03.09.2011, 13:53:24

Dein Template Code müsste ja eher so aussehen

Code: Alles auswählen

<@controller namespace="books::pres::controller" file="AuthorsListController" class="AuthorsListController" @>
<h2>Available authors</h2>
<table>
    <html:placeholder name="AuthorsList" />
</table>


<html:template name="AuthorsList">
    <tr>
        <td><template:placeholder name="AuthorName" /></td>
        <td><template:placeholder name="CreateDate" /></td>
    </tr>
</html:template>
Dadurch erzeugst du eine entsprechende Tabelle und gibst diese dann beim PlaceHolder aus
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 03.09.2011, 14:03:42

Ah ja! So sieht das schon besser aus.

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 03.09.2011, 14:14:19

Also das Template sieht dann wie folgt aus:

Code: Alles auswählen

<@controller namespace="books::pres::controller" file="AuthorsListController" class="AuthorsListController" @>
<h2>Available authors</h2>
<table>
    <tr>
    <th>Author</th>
    <th>Date</th>
    </tr>
    <html:placeholder name="AuthorsList" />
</table>

<html:template name="AuthorsList">
    <tr>
    <td><template:placeholder name="AuthorName" /></td>
    <td><template:placeholder name="CreateDate" /></td>
    </tr>
</html:template> 
Und der Controller:

Code: Alles auswählen

<?php
import('tools::link','FrontcontrollerLinkHandler');
import('modules::genericormapper::data','GenericDomainObject');
import('tools::http', 'HeaderManager');

class AuthorsListController extends base_controller{

    public function  transformContent() {

    $orm = $this->getMapper();

    $Crit = new GenericCriterionObject();
    $Crit->addPropertyIndicator('Author','%');

    $AuthorsList = $orm->loadObjectListByCriterion('Authors',$Crit);

    $template = &$this->getTemplate('AuthorsList');

    $buffer = '';
    
    foreach ($AuthorsList as $Author){
        $template->setPlaceHolder('AuthorName', $Author->getProperty('Author'));
        $template->setPlaceHolder('CreateDate', $Author->getProperty('CreationTimestamp'));
        $buffer .= $template->transformTemplate();
    }

        $this->setPlaceHolder('AuthorsList', $buffer);
    }

    private function getMapper(){

    $ormFact = &$this->getServiceObject('modules::genericormapper::data', 'GenericORMapperFactory');
    return $ormFact->getGenericORMapper('modules::gorm', 'books', 'books');
    }
}
?>
Wobei ich mir hier immer noch nicht ganz sicher bin, dass diese Lösung auch wirklich die hier angebrachte ist.

Als Ausgabe erhält man dann eine Tabelle mit sämtlichen, erfassten Autoren.

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: GORM für Einsteiger

Beitrag von dave » 03.09.2011, 17:48:32

Du wolltest doch alle Autoren ausgeben? Wie das ganze gestaltet wird, ist natürlich von dir abhängig. Das muss keine Tabelle sein ;).

Ich gebe meine Daten auf die gleiche Weise aus. Und mit dem ArrayPager kann man sogar blättern.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste