Zend Framework Tutorial Teil 7:
Zend_Db und Zend_View

ACHTUNG:
Dieses Tutorial wird nicht mehr weitergeführt, da es auf ältere Versionen des Zend Frameworks aufbaut. Das neue Projekt ist hier:
Zend Framework Tutorial - Wir bauen ein Content Management System (CMS)

Im sechsten Teil vom Zend Framework Tutorial haben wir die Zend_Db Komponente und deren Teilkomponenten kennen gelernt, um auf einen Datenbank zugreifen zu können. Die Ausgabe haben wir aber nur unformatiert auf dem Bildschirm ausgegeben, da wir hierfür noch keine Templates eingesetzt hatten. Wenn du die ersten sechs Teile noch nicht gelesen hast, hole dies bitte schnell nach.

In diesem siebten Teil des Tutorials werden wir uns um die Formatierung der Datenbankausgabe kümmern. Wir werden die Templates für die im letzten Teil bereits erstellten Aktionsmethoden für die Ausgabe und das Ändern der Daten erstellen. Dabei werden wir weitere Interaktion zwischen Controller und View sowie zusätzliche Hilfsmethoden für die Ausgabe kennen lernen.

Wenn du über neue Tutorial Teile informiert werden möchtest, abonniere am besten den Feed dieses Blogs. Dann verpasst du garantiert keinen Teil des Tutorials. Es gibt auch Übersicht mit den bisher erschienen Teilen des Tutorials.

Inhaltsverzeichnis

Aktionsmethode für Artikelliste anpassen

So, wir haben jetzt eine einfache Seite erstellt, die Form der Ausgabe krankt aber noch. Kümmern wir uns also um eine vernünftige Anzeige der aus der Datenbank ausgelesenen Werte.
Öffne dazu bitte zunächst die Datei ArticleController.php und ändere die Methode indexAction wie folgt:

PHP:
  1. <?php
  2.  
  3. class ArticleController extends Zend_Controller_Action
  4. {
  5.     public function indexAction()
  6.     {
  7.         $this->view->title = 'TravelloBlog - Artikelliste';
  8.        
  9.         $articles = new ArticleModel();
  10.        
  11.         $order  = 'art_cdate DESC';
  12.         $this->view->articles = $articles->fetchAll(null, $order);
  13.     }
  14.    
  15.     [...]
  16. }
  17.  
  18. ?>

Jetzt müssen wir natürlich die zugehörige index.phtml im Verzeichnis "/views/scripts/article/" ändern:

PHP:
  1. <?php
  2.  
  3. foreach ($this->articles as $a)
  4. {
  5.     echo '<h2><a href="article/show/id/'. $this->escape($a->art_id) .'">'.
  6.                                           $this->escape($a->art_title) .'</a></h2>';
  7.     echo '<p><em>'. $this->escape($a->art_cdate) .'</em></p>';
  8.     echo '<p>'. $this->escape($a->art_teaser) .'</p><br />';
  9. }
  10.  
  11. ?>

Dieses PHP Skript enthält neben ein wenig HTML Code (das Meiste steckt ja in unserem Layout Skript) auch die PHP Anweisungen für die Ausgabe der Template Variablen. Im Prinzip wird nur eine einfache foreach() Schleife durchlaufen und die Werte aus dem Array $this->articles einzeln ausgegeben. In der Variable $this wird eine Instanz von Zend_View erwartet. Somit stehen uns alle übergebenen Templatevariablen und einige Hilfsmethoden für die Ausgabe zur Verfügung.

Bei der Ausgabe wird für jede Variable escape() verwendet. escape() ist eine Methode von Zend_View und verwendet htmlspecialchars() von PHP zum Maskieren der Ausgabe.
Die Spaltennamen "art_title" oder "art_teaser" sind dir sicher noch aus der Definition unsere MySQL Tabelle "article" bekannt.

Vielleicht hast du auch schon folgende Schreibweise von z.B. der foreach() Schleife gesehen:

PHP:
  1. <?php
  2.  
  3. foreach ($this->articles as $a) :
  4.     echo '<h2><a href="article/show/id/'. $this->escape($a->art_id) .'">'.
  5.                                           $this->escape($a->art_title) .'</a></h2>';
  6.     echo '<p><em>'. $this->escape($a->art_cdate) .'</em></p>';
  7.     echo '<p>'. $this->escape($a->art_teaser) .'</p><br />';
  8. endforeach;
  9.  
  10. ?>

Es ist in einem alternativer Syntax für Kontrollstrukturen notiert (siehe dazu das PHP Manual). Hierbei wird die öffnende Klammer hinter foreach() durch einen Doppelpunkt und die schließende Klammer durch ein endforeach ersetzt. Früher war eine solche Schreibweise als 'altmodisch' verpöhnt, doch mit den Frameworks wurde sie wieder 'modern'. Du kannst verwenden, was dir am besten gefällt. Ich bleibe bei der (mir) gewohnten Schreibweise mit geschweiften Klammern.

Dir ist vielleicht die Zeile $this->view->title = 'TravelloBlog - Artikelliste'; in unserem ArticleController aufgefallen. Das haben wir ja noch nicht weiter verarbeitet. Damit unser Seitentitel auch angezeigt wird, öffnet bitte im Layout Verzeichnis die Datei main.phtml und ergänze diese:

HTML:
  1. [...]
  2.  
  3. <div id="header">
  4. <center><h1><?php echo $this->escape($this->title); ?></h1></center>
  5. </div>
  6.  
  7. [...]

Einen Artikel anzeigen

Für die Anzeige eines Artikels müssen wir das Template ebenfalls anpassen. Öffne dazu zunächst wieder der ArticleController und ändere die Methode showAction wie folgt:

PHP:
  1. <?php
  2.  
  3. class ArticleController extends Zend_Controller_Action
  4. {
  5.     [...]
  6.    
  7.     public function showAction()
  8.     {
  9.         $this->view->title = 'TravelloBlog - Artikel';
  10.        
  11.         $id = (int)$this->getRequest()->getParam('id');
  12.        
  13.         $articles = new ArticleModel();
  14.        
  15.         $this->view->article = $articles->fetchRow('art_id='.$id);
  16.     }
  17.    
  18.     [...]
  19. }
  20.  
  21. ?>

Zu Beginn benötigen wir die Id für den anzuzeigenden Artikel aus der URL. Dazu verwenden wir das Request Objekt und rufen dort die Methode getParam() auf. Das Request Objekt ist quasi das Gegenstück zum Response Objekt, welches wir weiter oben schon kennen gelernt haben. Weitere Infos zum Request Objekt kannst du auch dem Manual entnehmen.

Diese Artikel Id übergeben wir dann an die fetchRow() Methode unserer ArticleModel Klasse. Den restlichen Code kennen wir vom Prinzip her schon aus der indexAction Methode.

Jetzt müssen wir uns noch um die Ausgabe kümmern. Ändere dazu bitte die Skript Datei show.phtml:

PHP:
  1. <?php
  2.  
  3. echo '<h2>'. $this->escape($this->article->art_title) .'</h2>';
  4. echo '<p><em>'. $this->escape($this->article->art_cdate) .'</em></p>';
  5. echo '<p>'. $this->escape($this->article->art_text) .'</p><br />';
  6.  
  7. echo '<hr>';
  8. echo '<h2><a href="'. $this->url(array('controller'=>'article',
  9.                                        'action'=>'index'), null, true) .'">'
  10.                     .'zur&uuml;ck zur Artikelliste</a></h2>';
  11.  
  12. ?>

Im Unterschied zur Artikelliste benötigen wir in diesem Template keine foreach Schleife, sondern können direkt die Daten des Artikels ausgeben. Damit man wieder zurück zur Artikelliste kommt habe ich am Ende der Seite noch einen entsprechenden Link eingefügt.

Für die Abfrage eines Datensatzes über dem Primärschlüssel (bei uns die Article Id art_id) können wir auch die find() Methode verwenden. Die find() Methode ist im Gegensatz zur fetchRow() Methode speziell (ausschließlich) für die Abfrage eines Datensatzes mit dem Primärschlüssel vorgesehen.

Wenn wir find() verwenden wollen, dann schaut dies folgendermaßen aus:

ArticleController.php:

PHP:
  1. <?php
  2.  
  3. class ArticleController extends Zend_Controller_Action
  4. {
  5.     [...]
  6.    
  7.     public function showAction()
  8.     {
  9.         $this->view->title = 'TravelloBlog - Artikel';
  10.        
  11.         $id = (int)$this->getRequest()->getParam('id');
  12.        
  13.         $articles = new ArticleModel();
  14.        
  15.         $this->view->article = $articles->find($id);
  16.     }
  17.    
  18.     [...]
  19. }
  20.  
  21. ?>

show.phtml:

PHP:
  1. <?php
  2.  
  3. foreach ($this->article as $a)
  4. {
  5.     echo '<h2>'. $this->escape($a->art_title) .'</h2>';
  6.     echo '<p><em>'. $this->escape($a->art_cdate) .'</em></p>';
  7.     echo '<p>'. $this->escape($a->art_text) .'</p><br />';
  8. }
  9.  
  10. echo '<hr>';
  11. echo '<h2><a href="'. $this->url(array('controller'=>'article',
  12.                                        'action'=>'index'), null, true) .'">'
  13.                     .'zur&uuml;ck zur Artikelliste</a></h2>';
  14.  
  15. ?>

Wenn bei Datenbankabfragen viel mit dem Primärschlüssel gearbeitet wird (und das ist ja fast immer der Fall), gilt es noch eine mögliche Fehlerquelle auszuschließen. Der Primärschlüssel heißt beim Zend Framework per default id. Wenn er bei uns anders heißt, dann müssen wir dies ZF mitteilen. Öffne dazu bitte die Datei ArticleModel.php im Verzeichnis "/application/models" und ergänze:

PHP:
  1. <?php
  2.  
  3. class ArticleModel extends Zend_Db_Table_Abstract
  4. {
  5.     protected $_name    = 'article';
  6.     protected $_primary = 'art_id';
  7. }
  8.  
  9. ?>

Vielleicht ist dir noch der Link zurück zur Artikelliste aufgefallen. Hierfür habe ich den View Helper url($urlOptions, $name, $reset) verwendet. Eine enorm vielfältig anwendbare Methode.

Eigene View Helper

In View Skripten ist es oft notwendig, bestimmte Funktionen immer wieder auszuführen, z.B. Datum formatieren, Formularelemente erstellen oder Links für Aktionen anzuzeigen. Sollten solche Helfer(-klassen) nicht schon im Zend Framework existieren, dann kannst du eigene Helferklassen erstellen, um diese Aufgaben für dich durchführen zu lassen.

Das Zend Framework Manual über View Helfer beschreibt das - frei interpretiert - so:

Ein Helfer ist einfach eine Klasse. Nehmen wir an wir wollen einen Helfer der 'fooBar' heißt.
Standardmäßig wird der Klasse 'Zend_View_Helper_' vorangestellt und das letzte Segment des Klassennamens ist der Name des Helfers.
Dieses Segment sollte TitelGroßgeschrieben sein.
Der volle Klassenname ist dann: Zend_View_Helper_FooBar.
Diese Klasse sollte mindestens eine einzelne Methode enthalten, die nach dem Helfer benannt und camelCased ist: fooBar().

Bitte beachte:
Die Namen von Helfern (= die Methoden) sind immer camelCased, d.h sie müssen mit einem kleingeschriebenen Buchstaben beginnen. Der Klassenname selbst ist MixedCased.

Der Standard-Pfad zu den Helfer Dateien ist immer das Verzeichnis der View Helfer des Zend Frameworks - bei uns ist das "/application/views/helpers/". Also packen wir da unsere Helfer rein und dann brauchen wir uns um eine weitere Verlinkung während unserer Programmierung garnicht weiter kümmern. Wenn diese Konventionen (Namensgeben, Pfad) eingehalten werden, übernimmt ZF für uns die automatische Verlinkung.

Um einen Helfer in deinem View Skript zu verwenden, rufen wir ihn mittels $this->helperName() auf. Im Hintergrund wird Zend_View die Klasse Zend_View_Helper_HelperName laden, eine Objektinstanz der Klasse erstellen und deren Methode helperName() aufrufen. Die Objektinstanz bleibt innerhalb der Zend_View Instanz bestehen und wird bei allen weiteren Aufrufen von $this->helperName() wiederverwendet.

So, und das üben wir nun auch gleich :) :

Pfadanpassung

Als letztes für diesen siebten Teil muss ich noch ein wenig - sinnvolle - Kosmetik betreiben:
Im fünften Teil habe ich im Abschnitt Zend_Views kleine Helferlein den Pfad zum Laden der CSS-Datei fest angegeben. Das ist natürlich völlig unpraktisch. Deshalb muss das korrigiert werden.

Dazu gehe bitte in das Verzeichnis "/application/views/helpers/" und erstelle dort eine Datei mit dem Namen BaseUrl.php. Öffne dann bitte die Datei und schreibe dort hinein:

PHP:
  1. <?php
  2.  
  3. class Zend_View_Helper_BaseUrl
  4. {
  5.     public function baseUrl()
  6.     {
  7.         $front_controller = Zend_Controller_Front::getInstance();
  8.         return $front_controller->getBaseUrl();
  9.     }
  10. }
  11.  
  12. ?>

Wir machen uns hier die Action Helper Methode getBaseUrl() zur Ermittlung unserer (Haupt-) Url zu Nutze.

Jetzt müssen wir nur noch den Pfad zu unserer CSS-Datei ändern. Öffne dazu bitte die Datei main.phtml im Verzeichnis "/application/layouts/" und ändere den Link wie folgt:

PHP:
  1. //-- Externes Stylesheet einbinden
  2. echo $this->headLink()->appendStylesheet($this->baseUrl() .'/_files/css/styles.css');

Du siehst, wir sind mit der Erstellung unseres Helfers genau so vorgegangen, wie oben beschrieben.
Ändere spasseshalber mal den Dateinamen oder den Klassennamen und schau, was passiert.

Übung: Die weiteren Views

Als Übung bis zum nächsten Teil dieses Tutorials erstelle für die Kategorien und Tags die Templates für die Liste und die Anzeige einer Kategorie bzw. eines Tags. Zudem musst du auch in den Controller Klassen CategoryController und TagController die Aktionsmethoden indexAction und showAction überarbeiten, um die neuen Templates zu verwenden. Hierbei kannst du dich auch an dem ArticleController orientieren. Bitte verwende für showAction Methode zur Anzeige eines Tags bzw. einer Kategorie nicht den jeweiligen Primärschlüssel, sondern das Feld "tag_path" bzw. "cat_path".

Zur Kontrolle lade dir den aktuellen Stand des Tutorials runter. Dann kannst du deine Ergebnisse damit vergleichen.

Download

Der aktuelle Stand des Tutorials nach diesem siebten Teil kann herunter geladen werden. Hier sind auch alle Templates enthalten:

Die Zip Datei enthält nicht die aktuelle Version des Zend Frameworks. Dies musst du bitte selber in das entsprechende Verzeichnis kopieren.

Zusammenfassung

In diesem siebten Teil des Zend Framework Tutorials haben wir die DB Komponente unseres TravelloBlogs mit Hilfe der Zend_View Komponente des Zend Frameworks zu Ende gebracht.

Im nächsten Teil werden wir uns um die Formularverarbeitung kümmern. Wir werden ein Formular für das Anlegen und Ändern von Artikel erstellen und die schrittweise Verarbeitung des Formulars in unserem ArticleController realisieren. Außerdem werden wir uns um die Startseite unseres TravelloBlogs kümmern.

Fragen, Probleme und Anregungen bitte nicht per E-Mail senden, sondern hier in die Kommentare stellen. Dann haben alle etwas davon.

Changelog

  • 07.02.2009 - Erklärung zu eigenen View Helfern hinzugefügt.

Navigation

Autor:
Datum: Donnerstag, 5. Februar 2009 1:09
Trackback: Trackback-URL Themengebiet: Zend Framework Tutorial für Anfänger

Feed zum Beitrag: RSS 2.0 Diesen Artikel kommentieren

30 Kommentare

  1. 1

    Vielen dank für Deine Anpassungen.

    Ein kleiner Fehler http://www.zf-tutorials.de/archives/214#

    Da steht $articles und gemeint ist $article.

  2. 2

    Du führst den URL-Helper einfach ein. Da wäre es geschickt gewesen, ihn kurz zu erklären, da bisher ja nur bekannt war, dass eine URL nach dem Schema domain.tld/controller/action/ aufgebaut ist.

    Knapp weiter oben setzt du den link noch manuell zusammen, ohne auf die Möglichkeit einzugehen, wie GET-Variablen angehängt werden können.
    domain.tld/controller/action/name/wert/

    Weiter unten im URL-Helper machst du das dann einfach…

    ————-

    Was ich aber nicht verstehe, weil du es letztlich unerklärt nutzt, …

    $this->baseUrl()
    greift automatisch auf die Methode baseUrl()
    der Klasse Zend_View_Helper_BaseUrl aus der Datei application/views/helpers/BaseUrl.php zu?

    Woher weiß das Framework, dass die Datei ausgerechnet dort ist?

  3. 3

    danke ziczac, hab’s geändert.
    War glücklicherweise nur Online falsch, im Download-Source ist es korrekt.

  4. 4

    @jhb
    wenn ich immer was erklären könnte, würde ich es tun. ;)
    Bedenke bitte, dass ich – wie ich es schon in der Einleitung geschrieben habe – dieses Tutorial ‘nur’ an die aktuelle Version anpasse und selber auch noch lerne.
    Deshalb auch der Link zum Manual für url().
    Leider ist hierbei auch das Manual nicht wirklich sehr informativ.

    Eine Erklärung zu den View Helpern habe ich eingefügt.

  5. 5

    Leider ist hierbei auch das Manual nicht wirklich sehr informativ.

    Dem muss ich leider zustimmen.

    Mit kurz erklären meine ich auch nicht eine Einführung in die Nutzung, sondern eher ein Wort darüber was er macht, wie man darin Variablen übergibt. Bei mehr Interesse eben ins manual verweisen.
    Was ich aber meinte ist, dass du ihn einfach nutzt.
    Aber das ist auch nichts großartig bewegendes.

    Dir überhaupt danke für die Arbeit. Wie gesagt, ich warte täglich gespannt auf einen neuen Artikel :)

  6. 6

    Ich wollte lediglich meinen Dank anbringen. Deine Erläuterungen und deine Vorgehensweise bringen mich – nach einiger Suche im Netz – endlich dahin zumindest ein wenig mit dem Framework warm zu werden. Danke dafür.

  7. 7

    Eine einfache Ersetzung wie oben genannt war bei mir leider nicht möglich.
    Die find()-Methode gibt immer ein gibt ein Objekt vom Typ Zend_Db_Table_Rowset_Abstract zurück und nicht wie die fetchRow()-Methode ein Objekt vom Typ Zend_Db_Table_Row_Abstract. Das liegt daran, dass man mit find() auch mehrere Datensätzen anhand des Primärschlüssels über find(array(123,456)) finden kann.

    Bei mir konnte ich dann in der show.phtml die Werte über $this->escape($content['0']->xyz); ausgeben – sieht aber auch nicht so toll aus.
    Ich möchte aber erwähnen, dass ich ein totaler Neuling hier bin – kann dementsprechend auch murks sein.

  8. 8

    quatsch mit Soße ;) meine Lösung ist natürlich so:
    foreach($this->content as $c)
    {
    echo $this->escape($c->xyz);
    }
    Hinweis: $content ist bei mir das, was hier $article ist.

  9. 9

    Schonwieder ich :)

    Eine Sache mit $this->url(…) ist mir aufgefallen. Man muss diese Funktion mit Reset benutzen, sonst werden an die aufgerufene URL veränderte Parameter angehängt.
    Bei mir sah dass dann so aus:

    $this->url(array(‘controller’=>’article’,'action’=>’index’)) bringt: article/index/id/11

    ich habe es auf $this->url(array(‘controller’=>’article’),null,true) geändert und bringt nun: article/
    Wenn ‘action’=>’index’ am Ende steht, wird es von Zend automatisch weggelassen.

  10. 10

    > Eine einfache Ersetzung wie oben genannt war bei mir leider nicht möglich.
    > [...]
    > quatsch mit Soße ;) meine Lösung ist natürlich so:

    naja, so haben wir es hier ja auch gemacht :)

  11. 11

    > Eine Sache mit $this->url(…) ist mir aufgefallen.
    mir auch :)
    wurde dann auch im nächsten Kapitel bereits geändert.
    Nur hier hab ich nicht mehr drangedacht… :(

  12. 12

    And these are my changes for 1.8.2:

    Die Aktionsmethode und den View-Inhalt habe ich genau so übernommen. Wobei ich meist lieber auf echo verzichte und stattdessen den PHP-Teil unterbreche. Die PHP-Ausgaben gebe ich dann in <?= ?> aus. Aber das ist Geschmackssache. Außerdem wird vom Zend-Team vorgeschlagen, auf das letzte ?> zu verzichten wenn danach nichts mehr kommt.

    Auch für “Einen Artikel anzeigen” bleibt in 1.8.2 alles genau so. Hier übrigens mal meine show.phtml ohne echo:

    <h2><?= $this->escape($this->article->art_title) ?></h2>
    <p><em><?= $this->escape($this->article->art_cdate) ?></em></p>
    <p><?= $this->escape($this->article->art_text) ?></p><br />
    <hr>
    <h2><a href=”<?= $this->url(array(‘controller’=>’article’, ‘action’=>’index’), null, true) ?>”>zurück zur Artikelliste</a></h2>

    Find ich lesbarer…

    Auch der folgende Teil (mit find(id) statt detchRow) kann so übernommen werden.

    Und dann macht Uwe schon wieder was was ich versehentlich schon im vorigen Kapitel gemacht habe: Den BaseUrl-Helper anlegen. Habt ihr ja schon wenn ihr euch nach den Kommentaren von mir gerichtet habt.

  13. 13

    Fornewg mal: ch finde das Tutorial super!!

    Ich habe folgeden Effekt:
    Wenn ich in der incex.phtml wie vorgegeben den Link formuliere:
    “echo ‘escape($a->art_id) .’”>’. [...]”
    und so aufrufe:
    “http://localhost/travelloblog/public/article/index”
    stellt sich der effektive Link, der dann zum Aufruf kommt so dar:
    “http://localhost/travelloblog/public/article/article/show/id/21″
    und führt wegen des doppelten /aricle/article natürlich zum Fehler.
    Rufe ich die Seite mit
    “http://localhost/travelloblog/public/article”, also ohne “index” auf, kommt der Link richtig.

    Ich habe noch nicht verstanden, wie der Link zusammengesetzt wird, denn wenn ich mir den Quellcode des Browsers ansehe, steht da in beiden Fällen
    adsf
    also wird irgendwo im Hintergrund der Link vervollständigt.
    Kann mir jemand sagen was da passiert?

  14. 14

    da habe ich wohl vorher einige ungeschickte Copys gemacht.
    also nach derm ersten echo sollte kommen:
    a href=”article/show/id/’. $this->escape($a->art_id) .’”
    und in beiden Fällen steht da
    ‘a href=”article/show/id/21″‘

  15. 15

    Ich finde das Tutorial auch sehr sehr schön, jedoch schade dass es noch nicht angepasst wurde auf dem heutigen Stand.

    Allein das Atoloading und die Helper klassen funktionieren bei mir nicht so richtig. Der Rest funktioniert einwandfrei und ich bin so super dankbar für den schnellen schönen Einstieg.

    Ohne Probleme kann ich nun ne Webseite erstellen die konzeptionell getrennt ist :)

    Nice , danke für den Ersteller :)

  16. 16

    Kleiner Fehler bei der Verwendung des Helpers:

    Man ändert die Zeile in der “bootstrap.php”, NICHT in der “main.phtml”. Hat mich gerade etwas verwirtt ;-)

  17. 17

    …und der Autoloader wird in der 1.10.7 angemäkelt und sollte folgendermaßen (so funktioniert’s zumindest) ersetzt werden:

    Bootstrap.php
    ————-
    $autoloader = Zend_Loader_Autoloader::getInstance();

    views/scripts/article/index.phtml
    ———————————
    bei mir falsch:
    echo ‘escape($a->art_id) .’”>’.

    korrigiert:
    echo ‘
    escape($a->art_id) .’”>’.

    Ein super Tutorial. Vielen, vielen Dank! Aus der eigentlichen Doku & Quickstart bin ich nicht schlau geworden trotz zusätzlichen Büchern – aber hiermit geht’s vorwärts…

  18. 18

    die codezeilen wurden weggekürzt.
    bei mir falsch:
    /article/show/id

    korrigiert:
    show/id/

  19. 19

    ok – mit dem erstellten BaseUrl-Helper funktioniert die Sache auf einmal und der obige Fehler ist obsolet.

    In der Bootstrap.php muß bei mir auch auf einmal kein Pfad (auch kein Helper) mehr gesetzt werden und es läuft trotzdem??

  20. 20

    Hmmm… also ich hab das ganze etwas eleganter gelösst bei mir sind alle datenbank abfragen im model in der action haben meiner ansicht nach db queries nicht zu suchen, nicht gegen das tutorial im gegenteil das hat mir einige fragen die ich noch hatte beantworten können, hab vorher etwa 3 jahre in symfony Programmiert und bin seit gestern mal um was neues zu versuchen auf Zend eingegangen. falls interesse besteht kann ich ja mal meine version senden…

    geiles Tutorial Weiter so.

  21. 21

    @altano:
    Ich hätte schon Interesse an Deiner Version – wie komme ich da ran?

    Gruß
    Jens

  22. 22

    Hallo, liebe anhänger des Zend-Tutorials für Anfänger!
    Ich finde das Tutorial auch sehr gut und bin damit auch schon sehr weit gekommen, doch habe ich gerade ein Problem mit folgendem Befehl in meiner main.phtml:
    $this->escape($this->title);
    Er spuckt einfach nichts aus. Wenn ich ein var_dump($this) an gleicher stelle mache finde ich dort nicht was aussehen würde wie “["title"]=> …”.

    Schreibe ich den Befehl aber in ein View-Script z.B. unter view/scripts/meins/index.phtml bekomme ich den im MeinsController unter indexAction {$this->view->title = ‘TravelloBlog – Artikelliste’} gesetzten Wert. Wenn ich den var_dump($this) an dieser stelle durchsuche finde ich ["title"]=> string(27) “TravelloBlog – Artikelliste”.

    Könnt ihr mir weiterhelfen und sagen warum ich diesen Wert nicht in meinem Layout ausgeben kann?
    Zend Version: 1.11.5

    Schönen 1.Mai noch. Gruß
    Andreas A.

  23. 23

    Hallo!
    GELÖST!
    Nach einigen hin und her und mit anderen Tutorials habe ich folgenden Eintrag in der Bootstrap-Datei eliminiert:
    resources.view.encoding = “UTF-8″

    Ich habe keine Ahnung wie der da reingekommen ist! Danke das ich mich hier ausheulen durfte und weiterso mit den Tutorial.

  24. 24

    bin noch dabei geblieben, weil ich das tut doch recht gut finde.

    bei mir sieht vom code her zwar alles ein bischen anders aus und läuft im 1.11er zend, aber das macht ja nix.
    der tip von A² war auch nicht schlecht.

    greez

    ulle

  25. 25

    Is das normal 2x article/article/ ??

    –> http://localhost/test/public/article/article/show/id/6
    Kommt Fehler: An error occurred

    Page not found

    Mit –> http://localhost/test/public/article/show/id/6
    Dieser Fehler :
    An error occurred

    Application error

  26. 26

    ZF1.11.x Post #6 beachten.
    Error Ausgabe in applications.ini –>
    resources.frontController.params.displayExceptions = 1

    wurde ein paar Kapitel vorher genannt^^

  27. 27

    Einziges Problem was mir bleibt ist Post #21 aber #22 bietet mir leider keine hilfe..

  28. 28

    Hey, ich finde das Tutorial super!
    Habe allerdings ein Problem:
    Wenn ich jetzt z.B. http://localhost/article aufrufe, erhalte ich folgende Fehlermeldung:

    Fatal error: Class ‘ArticleModel’ not found in C:\xampp\htdocs\travelloblog\application\controllers\ArticleController.php on line 15

    Bei http://localhost/category das gleiche.
    In der Zeile 15 erfolgt der Aufruf der Article Klasse:
    $article = new ArticleModel();

    Wenn ich nur http://localhost/ aufrufe läuft alles.

    Woran könnte das liegen? Komme leider zu keiner Lösung gerade..

  29. 29

    //– Externes Stylesheet einbinden
    echo $this->headLink()->appendStylesheet($this->baseUrl() .’/_files/css/styles.css’);

    Gegen was soll das den ausgetauscht werden?

  30. 30

    Unteranderem verstehe ich auch diese Zeile nicht.. wofür ein (int) vor dem $this?

    $id = (int)$this->getRequest()->getParam(‘id’);

Kommentar abgeben