Frage zum (Document-)Controller Tutorial

Hier dreht sich alles um die auf der Webseite veröffentlichten Tutorials. // This forum is all about the APF tutorials.
Antworten
welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Frage zum (Document-)Controller Tutorial

Beitrag von welworx » 28.09.2010, 18:19:44

Hallo zusammen!

Es wird im Tutorial http://adventure-php-framework.org/Seit ... -Beispiele folgendes erwähnt:
das Laden der Liste übernimmt eine fiktive Business-Komponente (listLoader)
Da ich die Datei nirgendst gefunden habe, wollte ich fragen ob es möglich wäre den Inahlt dieser vlt zu Posten. Bzw wie die halt aussehen müsste.

Hintergrund: Ich habe das Tutorial Erstellen einer Webseite http://adventure-php-framework.org/Seit ... -erstellen durchgearbeitet, und würde gerne, möglichst elegant, die in der datenbank vorhandenen seiten auslesen und als einfaches menü ausgeben.

APFelsahne
Beiträge: 222
Registriert: 18.03.2010, 13:13:07
Wohnort: Ludwigshafen am Rhein
Kontaktdaten:

Re: Frage zum (Document-)Controller Tutorial

Beitrag von APFelsahne » 28.09.2010, 18:40:45

Hi!

Die Komponente hat nur eine öffentliche Methode loadList().
Was diese macht, also ob die Daten aus der DB, ob aus einer XML oder was auch immer kommen, dass weiß nur die Komponente bzw. der Entwickler der Komponente.
Da diese in dem fiktiv ist, weiß mans halt net :mrgreen:

Zum testen könntest du ja die Klasse aufsetzen und fest ein array aufbauen und zurückgeben.

Code: Alles auswählen

class listLoader extends APFObject
{
    public function loadList()
   {
        $aRet = array(....);
       return $aRet;
   } 
}
Grüße, Florian
BildAPF-Extension wsCatalyst

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: Frage zum (Document-)Controller Tutorial

Beitrag von welworx » 28.09.2010, 19:04:05

Vererst mal Danke für die rasche Antwort.

Auf die Idee einfach so eine Klasse anzulegen bin ich auch schon gekommen, aber ich erhalte dann folgende Meldung:

Code: Alles auswählen

Fatal error: Call to a member function get() on a non-object in C:\xampp\htdocs\testwebsite\apps\sites\testwebsite\pres\documentcontroller\menue_v1_controller.php on line 34 
Konkret handelt es sich da um folgende Zeile:

Code: Alles auswählen

$Template__ListItem->setPlaceHolder('ItemValue',$listItem->get('ListContent'));  
Hier ist nochmal die gesammte datei:

Code: Alles auswählen

import('sites::testwebsite::biz','listLoader'); 
class menue_v1_controller extends base_controller {
  function menue_v1_controller(){  } 

  function transformContent(){  
     // Liste in Platzhalter-Tag "List" einsetzen  
     $this->setPlaceHolder('List', $this->__buildList());  }  function __buildList(){  
     // listLoader erzeugen  
     $listLoader = & $this->__getServiceObject('sites::testwebsite::biz','listLoader');  
     // Liste laden  
     $List =  $listLoader->loadList();  
     // HTML-Puffer initialisieren  
     $Buffer = (string)'';  
     // Referenz auf Header-Template holen  
     $Template__ListHeader = & $this->__getTemplate('ListHeader');  
     // Liste durchlaufen und Items generieren  
     foreach( $List as  $lKey =>  $lItem){  
         // Ausgabe für Item generieren  
         $Buffer .=  $this->__buildListItem( $lItem); 
     }  
     // Items in das Header-Template einsetzen  
     $Template__ListHeader->setPlaceHolder('TableElements', $Buffer);  
     // Template transformieren und zurückgeben  return 
     $Template__ListHeader->transformTemplate(); 
 } 

 function __buildListItem(& $listItem){  
     // Referenz auf ListItem-Template holen  
     $Template__ListItem = & $this->__getTemplate('ListItem');  
     // Inhalt des Templates setzen  
     $Template__ListItem->setPlaceHolder('ItemValue',$listItem->get('ListContent'));  
     // Template transformieren und zurückgeben  return 
     $Template__ListItem->transformTemplate();  
 }
 }
Wie müsste die Fehlende Funktion aussehen?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Frage zum (Document-)Controller Tutorial

Beitrag von dr.e. » 28.09.2010, 19:38:09

Hi,

wie APFelsahne schon geschrieben hat: das Beispiel ist fiktiv. Du bist daher nicht gezwungen eine neue Klasse anzulegen, sondern kannst die Arbeit natürlich auch dem menu_v1_controller überlassen.

Was deinen Fehler angeht, so vermute ich, dass du an dieser Stelle ein Array und kein Objekt in Händen hälst. Wie sieht der Code der Klasse listLoader aus? Was sagt ein

Code: Alles auswählen

var_dump($listItem)
?
Viele Grüße,
Christian

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: Frage zum (Document-)Controller Tutorial

Beitrag von welworx » 28.09.2010, 21:29:56

var_dump liefert:

Code: Alles auswählen

string(6) "Punkt2"
biZ/listLoader.php

Code: Alles auswählen

<?php

class listLoader extends APFObject
{
    public function loadList()
   {
        $aRet = array("Punkt2","Punkt2");
       return $aRet;
   }
}

?>
Das ich nur einen String habe und kein Objekt ist vollkommen richtig.

Wie kann ich aber ein entsprechendes Objekt erzeugen?
Der schnelle folgende Versuch:

Code: Alles auswählen

class listLoader extends APFObject
{
    public function loadList()
   {
   #print_r($this);
     
     $t=new APFObject();
   $t->set('ListContent',"sowas");
        $aRet = array($t);
       return $aRet;
   }
}
scheitert leider.

Code: Alles auswählen

Fatal error: Cannot instantiate abstract class APFObject in C:\xampp\htdocs\testwebsite\apps\sites\testwebsite\biz\listLoader.php on line 9 
($t=new APFObject();)

Dass das ganze nur fiktiv ist ist mir schon klar. Ebenso dass ich keine Klasse anlegen muss. Ich versuche aber das System zu verstehen und daher will ich es ;)

APFelsahne
Beiträge: 222
Registriert: 18.03.2010, 13:13:07
Wohnort: Ludwigshafen am Rhein
Kontaktdaten:

Re: Frage zum (Document-)Controller Tutorial

Beitrag von APFelsahne » 28.09.2010, 21:44:37

das APFObject selbst ist als abstract gekennzeichnet, lässt sich also nicht instanzieren.

leite einfach ein eine neue klasse davon ab und nutze die.
Grüße, Florian
BildAPF-Extension wsCatalyst

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Frage zum (Document-)Controller Tutorial

Beitrag von dr.e. » 28.09.2010, 22:24:13

Kleine Ergänzung: sofern es "nur" ein Daten-Container sein soll, kann das auch eine Klasse à la

Code: Alles auswählen

class ListeItem {
   public function getName(){...}
   public function setName($name){...}
   ...
}
sein.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast