CakePHP & DIEVOLUTION Blog

CakePHP 1.2 Blog Tutorial Teil 4: mehr Gebäck!

 

Zuerst einmal vielen Dank für das Feedback auf meine ersten drei Blogartikel, freut mich, dass ihr den Artikel so wohlwollend aufgenommen habt. Wie ich schon angedeutet habe, wird der Dreiteiler natürlich nicht das Ende des Tutorials sein, denn in CakePHP gibt es noch viel mehr zu entdecken. Da ich leider jedoch auch noch für meine Brötchen arbeiten muss, wird es weitere Teile des Blog Tutorials immer mit etwas Abstand geben. Zudem arbeite ich gerade an der englischen Übersetzung, die hoffentlich bald auch veröffentlicht werden kann.

Bevor es zum Inhalt dieses Artikels kommt, noch etwas in eigener Sache: Falls jemand ein gutes Plugin kennt, um PHP Code mit Syntaxhighlighting inklusive Copy and Paste hier im Blog einzufügen, bitte mir den Link schicken. Das aktuelle Plugin ist zwar auch OK, aber es geht sicherlich noch besser.

Dieses Tutorial schließt an meine ersten drei Teile an. Wer bisher noch keinen Kontakt mit CakePHP hatte oder das Tutorial noch nicht durchgespielt hat, sollte dies zunächst tun. Für die ganz schnellen unter uns gibt es den Code zum Tutorial im dritten Teil zum Download, so dass ihr gleich loslegen könnt.

Inhaltsverzeichnis:

  • Routes
  • Layout verändern
  • Kommentare hinzufügen
  • Captcha Komponente erstellen

Teil 4: mehr Gebäck!

Teil 4.1
Routes
Nach dem Installieren des Tutorial Blogs werdet ihr sicher auch festgestellt haben, dass beim Aufruf von http://localhost/tutorial/ nicht unbedingt die Seite kommt, die ihr euch vorstellt, sondern die Cake Startseite. Erst beim Aufruf von http://localhost/tutorial/posts/ werdet ihr die korrekte Seite sehen. Dies ist ein Zustand, den man so guten Gewissens nicht lassen kann, denn wer will schon seinen Usern eine URL www.example.com/posts/ aufdrücken? Die User sollen nach dem Aufruf von www.example.com schließlich auf die richtige Seite umgeleitet werden.

Um diesem Problem Herr zu werden, verwendet Cake eine besondere Technik, die Routes. Diese liegen, wie der Name vermuten lässt, in der Datei Routes.php im /app/config/ Ordner.
In Zeile 36 dieser Datei sehen wir den folgenden Ausdruck:
/app/config/routes.php

  1. Router::connect(‘/’, array(‘controller’ => ‘pages’, ‘action’ => ‘display’, ‘home’));

Hier verweisen wir also bei Aufruf von “/” (also von http://localhost/tutorial/, dem Rootfolder von Cake) auf den Controller “Pages” und die Aktion “display”.
Wir ändern nun die Route wiefolgt ab:
/app/config/routes.php

  1. Router::connect(‘/’, array(‘controller’ => ‘posts’, ‘action’ => ‘index’));

Durch diese Änderung wird nun bei Aufruf von “/” auf “/posts/index” verwiesen, was in diesem Tutorial der Indexseite entspricht. Einfach, oder? Euch wird es sicherlich leicht fallen, weitere Routes anzulegen, um die Macht dieser kleinen Datei voll ausnutzen zu können.
Dazu noch ein Tipp:

  1. Router::connect(‘/’, array(‘controller’ => ‘/:group/posts’, ‘action’ => ‘index’));

Setzt ihr den mächtigen : Operator ein, so könnt ihr diesen via $this->params[’group’] mit einem Wert belegen, zum Beispiel nur Posts aus einem bestimmten Thema anzeigen.

Teil 4.2
Layout
In den Kommentaren zu den ersten drei Tutorialteilen war auch ein Kommentar, wo gefragt wurde, wie man ein eigenes Layout erstellen kann. Dies will ich nun erklären.

Bisher ist unser Blog Tutorial noch sehr im offiziellen Cake Stil gehalten, was wenig verwunderlich ist, da wir das Layout und das CSS von Cake einsetzen. Um ein eigenes Layout zu erstellen, legt ihr im Ordner /app/views/layouts die Datei default.ctp an. Fügt nun folgenden Code in diese Datei ein:
/app/views/default.ctp

  1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
  2. <html xmlns=“http://www.w3.org/1999/xhtml”>
  3. <head>
  4.         <title><?php echo $title_for_layout;?></title>
  5. </head>
  6. <body>
  7. <?php
  8. $session->flash();
  9. echo $content_for_layout;?>
  10. </body>
  11. </html>

Momentan noch sehr rudimentär erkennt ihr sicherlich trotzdem drei wesentliche Punkte. Das Title-Tag wird mit $title_for_layout gefüllt, was standardmäßig dem aktuellen Controller entspricht, in Fall eines Aufrufes von “http://localhost/tutorial/” sollte dies der Posts Controller sein.
Im Body sehen wir zwei Tags, zum einen $content_for_layout, das, wie erwartet, den Inhalt der Seite präsentiert, also den View, zum anderen $session->flash(). Diese Funktion ist für die Ausgabe der $this->Session->setFlash(’Message’) Nachrichten, mit der man dem User mitteilen kann, ob seine gerade ausgeführte Aktion Erfolg hatte oder nicht. Beispiele findet ihr in der posts_controller.php Datei.

Wenn ihr nun die Seite aufruft, werdet ihr feststellen, dass vom ursprünglichen Layout nichtmehr viel übrig geblieben ist. Um eine CSS Datei zu laden, fügt folgenden Code hin den Header der default.ctp ein:
/app/views/default.ctp

  1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
  2. <html xmlns=“http://www.w3.org/1999/xhtml”>
  3. <head>
  4.         <title><?php echo $title_for_layout;?></title>
  5.         <?php echo $html->css(“cake.generic”);?>
  6. </head>
  7. <body>
  8. <div id=“content”>
  9. <?php
  10. $session->flash();
  11. echo $content_for_layout;?>
  12. </div>
  13. </body>
  14. </html>

Nach einem Refresh eurer Seite sehr ihr nun wieder das Cake Türkisgrün, allerdings nun etwas leichtgewichtiger, da wir ja keinen Header mehr haben ;-)
Damit die ganze Seite aber nun zumindest etwas mehr wie ein Blog, und weniger wie die Scaffoldseite aussieht, legen wir noch etwas Hand an.
Erstellt zuerst folgende CSS Datei:
/app/webroot/css/blog.css

  1. .post {
  2.         width: 600px;
  3.         margin: 20px;
  4. }
  5.  
  6. .small {
  7.         font-size: 80%;
  8. }

Damit diese CSS Datei auch geladen wird, schreiben wir sie nun in den Header des Layouts:
/app/views/layouts/default.ctp

  1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
  2. <html xmlns=“http://www.w3.org/1999/xhtml”>
  3. <head>
  4.         <title><?php echo $title_for_layout;?></title>
  5.         <?php echo $html->css(“cake.generic”);?>
  6.         <?php echo $html->css(“blog”);?>
  7. </head>
  8. <body>
  9. <div id=“content”>
  10. <?php
  11. $session->flash();
  12. echo $content_for_layout;?>
  13. </div>
  14. </body>
  15. </html>

Nun ändert noch die Posts/Index Datei ab:
/app/views/posts/index.ctp

  1. <h1>Mein erstes Blog</h1>
  2. <?php echo $html->link(‘Neuer Beitrag’, ‘/posts/add’);?>
  3.  
  4. <?php foreach($posts as $post):?>
  5. <div class=“post”>
  6. <h1><?php echo $html->link($post[‘Post’][‘titel’], “/posts/view/”.$post[‘Post’][‘id’]);?></h1>
  7. <p class=“small”>Erstellt am <?php echo $datum->date_de($post[‘Post’][‘created’], 2);?></p>
  8. <p><?php echo $post[‘Post’][‘inhalt’];?></p>
  9. <p class=“small”><?php echo $html->link(‘(’.count($post[‘Comment’]).‘) Kommentare’, “/posts/view/”.$post[‘Post’][‘id’].“#comments”);?> <?php echo $html->link(‘Editieren’, ‘/posts/edit/’.$post[‘Post’][‘id’]);?> <?php echo $html->link(‘Löschen’, ‘/posts/delete/’.$post[‘Post’][‘id’], null, ‘Wirklich löschen?’);?></p>
  10. </div>
  11. <?php endforeach;?>

Dies ist zwar noch nicht der Weisheit letzter Schluss, aber es kommt schon eher an den Namen “Blog” heran. Zudem haben wir gleich noch die geschriebenen Kommentare gezählt.

Ihr könnt nun eure Seite selbst stylen, wie ihr möchtet, euch sind dank CSS keine Grenzen gesetzt. Wenn ihr Inspiration sucht, geht doch mal in den www.csszengarden.com. Dort werdet ihr mit Sicherheit erleuchtet.

Teil 4.3
Kommentar hinzufügen
Dieses Thema hatten wir schon im dritten Teil des Tutorials, aber auf vielfachen Wunsch und zur Vorbereitung der nächsten Lektion fügen wir nun eine Möglichkeit ein, wie ein User einen Kommentar in unserem Blog hinterlassen kann.
Dazu editieren wir die Datei /app/views/posts/view.ctp und fügen ein Formular ein, mit dem User Kommentare direkt abgeben können.
/app/views/posts/view.ctp

  1. <h1><?php echo $post[‘Post’][‘titel’];?></h1>
  2. <p><?php echo $post[‘Post’][‘inhalt’];?></p>
  3. <p>Dieser Beitrag wurde erstellt am: <?php echo $datum->date_de($post[‘Post’][‘created’]);?></p>
  4. <p><?php echo $html->link(‘zurück zur Übersicht’, ‘/posts/’);?></p>
  5.  
  6. <h2>Kommentare:</h2>
  7. <?php foreach($post[‘Comment’] as $comment):?>
  8. <p><?php echo $comment[‘autor’];?> schrieb am <?php echo $datum->date_de($comment[‘created’],2);?>:</p>
  9. <p><?php echo $comment[‘inhalt’];?></p>
  10. <hr>
  11. <?php endforeach;?>
  12. <!– NEU –>
  13. <h2>Kommentar verfassen</h2>
  14. <?php echo $form->create(‘Comment’, array(‘action’=>‘add/’.$post[‘Post’][‘id’]);?>
  15. <?php echo $form->input(‘autor’);?>
  16. <?php echo $form->input(‘inhalt’);?>
  17. <?php echo $form->submit(‘Kommentar senden’);?>
  18. <?php echo $form->end();?>
  19. <!– ENDE –>

Ein weiterer Vorteil der CakePHP Formulare ist die Magie des $form->input Elements. Es kann anhand des Datenbankfeldes erkennen, welcher Typ am besten für das Element geeignet ist. In diesem Fall bekommen wir für das Feld “Inhalt” automatisch ein Textfield angezeigt.
Tipp: Verwendet, wann immer ihr könnt, das $form->input Element. Dort sind mit Abstand die meisten Optionen vorhanden, es erstellt standardmäßig Divs und Labels und und und. Wollt ihr einen Typ definieren, schreibt einfach:

  1. <?php echo $form->input(‘feld’, array(‘type’=>‘date’);?>

Ersetzt den Type durch den Feldtyp, den ihr haben möchtet, in diesem Fall wird es ein Datum.

Damit das Kommentar auch gespeichert wird, fehlt uns noch folgende Add-Funktion:
/app/controllers/comments_controller.php

  1. <?php
  2.  
  3. class CommentsController extends AppController
  4. {
  5.     var $name = ‘Comments’;
  6.     var $scaffold;
  7.    
  8.     function add($id = NULL) {
  9.         if (!empty($this->data)) {
  10.             $this->data[‘Comment’][‘post_id’] = $id;
  11.             $this->data[‘Comment’][‘id’] = ;
  12.             if ($this->Comment->save($this->data)) {
  13.                 $this->Session->setFlash(‘Kommentar hinzugefügt’);
  14.                 $this->redirect($this->referer());
  15.             }
  16.         }
  17.     }
  18. }
  19.  
  20. ?>

Nun sollte es möglich sein, Kommentare auch direkt im Artikel zu schreiben. Allerdings gibt es in der heutigen Internetzeit das Problem, dass viele Spammer gerne auf Blogs losgehen. Ohne Absicherung ist man nicht mehr sicher. Genau darum kümmern wir uns jetzt und lernen nebenbei das Anlegen einer Komponente.

Teil 4.3
Captcha Komponente erstellen
Zuerst einmal die Vorüberlegung. Unser Captcha soll zugänglicher sein als die Grafikcaptchas, gleichzeitig aber relativ sicher, zumindest solange sich niemand die Mühe macht und das Script aushebelt. Bei unserer kleinen Seite sollte also ein kleines Script ausreichen.
Damit der User ein Kommentar abgeben kann, muss er etwas kopfrechnen, und zwar stellen wir ihm Aufgaben wie “drei Kuchen plus ein Kuchen”. Wenn er nun 4 in das Captchafeld eingibt, wird das Kommentar gespeichert, sonst nicht. Ich muss zugeben, dass diese Idee nicht von mir ist, sondern bereits in vielen Blogs Verwendung findet, allerdings geht es hier auch nicht um Innovation, sondern um Cake, oder? :-)

Erstellen wir zunächst die Komponente. Komponenten befinden sich im Ordner /app/controller/components und können sowohl vom View wie auch vom Controller angesprochen werden. Dieses Verhalten machen wir uns zunutze:
/app/controllers/components/dievocap.php

  1. <?php
  2. class DievocapComponent extends Object
  3. {
  4.     function startup(&$controller)
  5.     {
  6.         $this->controller = $controller;
  7.     }
  8.  
  9.     function render()
  10.     {
  11.         $zahlen = array(“keinem”,“einem”, “zwei”, “drei”, “vier”, “fünf”, “sechs”,“sieben”,“acht”,“neun”);
  12.         $zahl1 = mt_rand(0,9);
  13.         $zahl2 = mt_rand(0,9);
  14.         $summe = $zahl1 + $zahl2;
  15.         $this->controller->Session->write(“dievocaptcha.ergebnis”,$summe);
  16.         $this->controller->Session->write(“dievocaptcha.zahl1″,$zahlen[$zahl1].” Kuchen “);
  17.         $this->controller->Session->write(“dievocaptcha.zahl2″,$zahlen[$zahl2].” Kuchen “);
  18.     }
  19. }
  20. ?>

Zur Funktion:
in der Funktion “startup” wird zunächst festgelegt, dass die Komponente mithilfe von “controller” jeden beliebigen Controller imitieren kann. Dadurch kann die nächste Funktion erst erfolgreich sein.
In der Render Funktion wird zunächst das Array mit den ausgeschrieben Zahlen gefüllt. Danach werden zufällig zwei Zahlen ausgewählt und addiert. Ist dies geschehen, schreiben wir sowohl die beiden Zahlen wie auch das Ergebnis in die aktuelle Session.
Nun geht es an den View. Damit das Captcha auch korrekt angezeigt wird, erweitern wir unseren View wie folgt:
/app/views/posts/view.ctp

  1. <h1><?php echo $post[‘Post’][‘titel’];?></h1>
  2. <p><?php echo $post[‘Post’][‘inhalt’];?></p>
  3. <p>Dieser Beitrag wurde erstellt am: <?php echo $datum->date_de($post[‘Post’][‘created’]);?></p>
  4. <p><?php echo $html->link(‘zurück zur Übersicht’, ‘/posts/’);?></p>
  5.  
  6. <h2>Kommentare:</h2>
  7. <?php foreach($post[‘Comment’] as $comment):?>
  8. <p><?php echo $comment[‘autor’];?> schrieb am <?php echo $datum->date_de($comment[‘created’],2);?>:</p>
  9. <p><?php echo $comment[‘inhalt’];?></p>
  10. <hr>
  11. <?php endforeach;?>
  12. <h2>Kommentar verfassen</h2>
  13. <?php echo $form->create(‘Comment’, array(‘action’=>‘add/’.$post[‘Post’][‘id’]));?>
  14. <?php echo $form->input(‘Autor’);?>
  15. <?php echo $form->input(‘inhalt’);?>
  16. <!– NEU –>
  17. <div class=“input”>
  18. <p>Löse die folgende Aufgabe, um deinen Eintrag absenden zu können:</p>
  19. <p>Summe aus <?php echo $session->read(“dievocaptcha.zahl1″).” und “.$session->read(“dievocaptcha.zahl2″);?> ist
  20. <?php echo $form->input(“captcha”, array(’style’ => ‘width: 40px’, ‘div’=>false, ‘label’=>false));?></p>
  21. </div>
  22. <!– ENDE –>
  23. <?php echo $form->submit(‘Kommentar senden’);?>
  24. <?php echo $form->end();?>

Bisher wird es aber so noch nicht funktionieren, da ein elementarer Teil fehlt: Der Controller muss natürlich auch noch erweitert werden, und zwar so:
/app/controllers/posts_controller.php (Auszug)

  1. <?php
  2. class PostsController extends AppController
  3. {
  4.     var $name = ‘Posts’;
  5.     var $helpers = array(‘Form’, ‘Datum’);
  6.     var $components = array(‘Dievocap’);
  7.    
  8.     function index() {
  9.       $eintraege = $this->Post->findAll();
  10.      
  11.       $this->set(‘posts’,$eintraege);
  12.     }
  13.    
  14.    
  15.     function view($id = NULL) {
  16.       $this->Post->id = $id;
  17.       $this->set(‘post’,$this->Post->read());
  18.       $this->Dievocap->render();
  19.     }
  20. []
  21. ?>

Passt hierbei auf, dass wir dies in den Posts Controller schreiben, nicht in den Comments Controller.
Mit var $components = array(’Dievocap’); laden wir zuerst die Komponente. Dann setzen wir im View den Befehl $this->Dievocap->render();, um das Captcha zu initialisieren. Wenn ihr nun die Seite ladet, seht ihr bereits das Captcha arbeiten. Allerdings müssen wir das Ergebnis noch prüfen. Dies erledigen wir im Comments_Controller:
/app/controllers/comments_controller.php

  1. <?php
  2.  
  3. class CommentsController extends AppController
  4. {
  5.     var $name = ‘Comments’;
  6.     var $scaffold;
  7.    
  8.     function add($id = NULL) {
  9.         if (!empty($this->data) && ($this->Session->read(‘dievocaptcha.ergebnis’) == $this->data[‘Comment’][‘captcha’])) {
  10.             $this->data[‘Comment’][‘post_id’] = $id;
  11.             $this->data[‘Comment’][‘id’] = ;
  12.             if ($this->Comment->save($this->data)) {
  13.                 $this->Session->setFlash(‘Kommentar hinzugefügt’);
  14.                 $this->redirect($this->referer());
  15.             }
  16.         } else {
  17.             $this->Session->setFlash(‘Fehler: bitte Eingabe überprüfen’);
  18.             $this->redirect($this->referer());
  19.         }
  20.     }
  21. }
  22.  
  23. ?>

Nachdem dies geschehen ist, sollte das Captcha funktionieren. Damit habt ihr nun gelernt, wie man Komponenten erstellt, ist dieser Teil des Tutorials beendet. Wenn es euch gefallen hat, hinterlasst doch einen Kommentar, wenn ihr Fehler entdeckt habt, teilt sie mir bitte mit, damit ich sie korrigieren kann. Habt ihr weitere Fragen, oder wünscht ihr mehr Tutorials? Teilt mir eure Wünsche mit, damit ich die Tutorialserie fortsetzen kann.

Zu guter Letzt gibt es natürlich auch diesmal wieder das Tutorial als Download, inklusive der SQL DB.


Veröffentlicht am Freitag, den 19. Oktober 2007 um 08:53 Uhr veröffentlicht

Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

29 Reaktionen zu “CakePHP 1.2 Blog Tutorial Teil 4: mehr Gebäck!”

 

  1. Sven Am 19. Oktober 2007 um 15:15 Uhr

    Super Tutorial. Weiter so!

  2. rtauchnitz.de » Blog Archive » CakePHP Blog Tutorial Teil 4 Am 21. Oktober 2007 um 18:58 Uhr

    […] von mir schon einmal angesprochene CakePHP Blog Tutorial wurde um einen weiteren Teil ergänzt. Dieses Mal geht es unter anderem um Routes und […]

  3. Der RedDot CMS Giesen Am 23. Oktober 2007 um 11:05 Uhr

    Ich suche gerade nach einer schnellen und natürlich einfachen Lösung für ein Kontaktformular. Macht cakePHP da generell Sinn?

  4. dievo Am 23. Oktober 2007 um 11:08 Uhr

    Durchaus macht auch bei sowas CakePHP Sinn. Es ist vielleicht mit 700kb ein bisschen aufgebläht ;) aber da nur ein kleiner Teil geladen wird, auf jeden Fall zu gebrauchen. CakePHP hat seit 1.2 eine eingebaute E-Mail Komponente, von daher fallen nicht einmal sperrige Plugins an. Hier gibts eine gute Starthilfe für den Code hinter dem Kontaktformular: http://bakery.cakephp.org/articles/view/brief-overview-of-the-new-emailcomponent

  5. Klaus Am 26. Oktober 2007 um 08:47 Uhr

    Wieder ne super Arbeit. Dankeschön!
    Wünsche? Na klar - jede Menge. ;-)
    Z.B. versuche ich gerade ne User-Authentifizierung hinzubekommen. das Tutorial auf cakphp mach aber nicht, was ich möchte: Sessionfehler, weiße Seiten ohne erkennbare Fehlermeldung… Grmpf

    Gruß
    Klaus

  6. Klaus Am 26. Oktober 2007 um 09:50 Uhr

    Anmerkung: Das Einfügen des CSS-Files in das Layout funktioniert bei mir nur bei Verwendung des Hochkommas:
    css(’cake.generic’);?>
    Ich verwende die aktuellste (Beta-)Version. Hat sich da evtl. etwas gegenüber der Vorversion geändert?

  7. dievo Am 26. Oktober 2007 um 21:16 Uhr

    Wenn du nur weiße Seiten siehst, stell mal den debug auf 1 oder 2 (in der app/config/core.php). Dann wird dir angezeigt, welcher Fehler vorliegt.

    Ich verwende eigentlich auch immer die einzelnen Anführungszeichen, keine Ahnung warum ich hier doppelte benutzt habe, ist aber auch egal eigentlich.

  8. Klaus Am 10. November 2007 um 11:17 Uhr

    Hallo,
    zum Thema Wordpress Plugin:
    Hast Du schon dieses probiert?:
    http://www.deanlee.cn/wordpress/code_highlighter_plugin_for_wordpress/

    Die Liste kennst Du aber sicher..:
    http://codex.wordpress.org/Plugins/Syntax_Highlighting

    Gruß
    Klaus

  9. Björn Am 13. November 2007 um 15:27 Uhr

    Lob und Anerkennung für dieses wirklich toll geschriebene Tutorial! Weiter so!

    Es hat mir die ersten Schritte mit CakePHP einfach und verständlich nahe gebracht.

  10. Simon Brüchner Am 1. Dezember 2007 um 06:48 Uhr

    Tutorial examples cleanup: http://www.kolchose.org/simon/replaceMarkup/index.php

  11. LoadBalancer Am 19. Dezember 2007 um 11:46 Uhr

    Hi,

    ich glaube, da ist was durcheinandergekommen: Am Anfang beim Layout ist die Rede von “/app/views/default.ctp”, was nicht funktioniert, richtig wäre “/app/views/layouts/default.ctp”, später steht das dann auch so da :-)

  12. LoadBalancer Am 19. Dezember 2007 um 12:01 Uhr

    Und nochwas, ich will ja nicht klugscheissen, aber im Code für “/app/views/posts/view.ctp” fehlt in Zeile 14 eine abschließende Klammer… :-)

  13. Christian Am 29. Dezember 2007 um 20:59 Uhr

    Ich muss einfach sagen: Hammer!! Das Tutorial bildet alles ab, was man als kompletter Cake-Noob wissen muss, ich habe jetzt schon eine ungefähre Ahnung wie ich meine Anwendungen bauen muss und werde es auch direkt mal in einem Großprojekt versuchen. Ich habe gerade erst dein Tutorial komplett durchgearbeitet, von daher keine speziellen Wünsche für ein nächstes Tutorial, aber hoffe doch, dass noch eins kommt. Feed wurde aufjedenfall schonmal abonniert :)

  14. Jochen Am 6. Januar 2008 um 02:07 Uhr

    Danke, mehr gibts es da nicht zu sagen!

    Echt toll, jetzt kann ich endlich in ERM denken und pflück mich dann durch die Cake-Konventionen. Auch als PHP-Laie klappte alles recht gut.

    Ich habe nun alle Tuts an einem Tag durch und bin daher etwas verdattelt,a ber grundsätzlich wäre es für mich schön zu wissen, wie man eine wordpressgetriebene Seite und Cakephp zusammenschustert - das scheint mir aber was längerfristiges zu sein.

    Es gibt ja auch ein HTML-CSS-Framework unter Yaml.de, mal schauen ob ich das hinbekomme, dass Cake im Yaml-Kleid daherkommt.

    Riesentutorial! - vielen Dank. Gute Nacht.

  15. dievo Am 6. Januar 2008 um 11:28 Uhr

    Ich setze für eine Offline-Applikation auch YAML mit CakePHP ein. Es geht sogar sehr gut :-)

  16. been Am 8. Januar 2008 um 19:01 Uhr

    Hallo,

    ich möchte auch eine so tolle Navigationsleiste wie bei diesem Blog erstellen. Wie geht’s das?

  17. Kim Am 22. Januar 2008 um 19:56 Uhr

    Hallo zusammen, ich finde das tutorial super toll!

    ich bekomme aber leider beim abschicken von Formularen immer diesen Fehler:

    Warning (2): Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\cake\app\controllers\comments_controller.php:22) [CORE\cake\libs\controller\controller.php, line 546]

    Weiss jemand was ich tun muss?

    Lg Kim

  18. dievo Am 22. Januar 2008 um 20:01 Uhr

    Hallo Kim,
    schau mal, ob nach dem ?> PHP Abschluss in der comments_controller.php noch Zeilenumbrüche und/oder Leerzeichen stehen. Das kommt meist beim kopieren von Codefragmenten vor. Wenn die verschwunden sind, sollte auch die Headerwarnung verschwunden sein.

  19. Kim Am 22. Januar 2008 um 23:45 Uhr

    Hallo dievo,
    vielen Dank für deine Antwort, ich habe alle Umbrüche und Leerzeichen entfernt, aber leider erscheint der Fehler dennoch.

    Kann es sein das ich im voraus etwas einstellen muss, so dass das nicht passiert?

    Lg Kim

  20. Kim Am 22. Januar 2008 um 23:51 Uhr

    Ah Okay, da war doch noch ein Leerzeichen ;-)

    Danke vielmals!

  21. Ulm Am 28. Februar 2008 um 17:31 Uhr

    Hallo,
    ich war einige Zeit auf der Suche nach einer geeigneten möglichkeit mein vorhaben ein kleines cms objektorientiert in php & mySQL zu realisieren und hab mir aufgrund dessen diverse Frameworks angeschaut da man sich ja nur noch seine “logischen komponenten” zusammenbasteln muss.
    Cake hat mich nachdem ich mir dein Tutorial durchgesehen habe doch überzeugen können und jetzt schwirren mir grade noch einige fragen im kopf rum:
    angenommen ich hab mein basislayout in dem sich das content object befindet. jetzt möchte ich aber auch noch objekte anzeigen die in der seite noch die seitennavigation die auch dynamisch erzeugt werden soll oder noch zuätzliche elemente wie eine sidebar in die seite einbinden? wie kann man sowas ungefähr realisieren?

    Meine zweite frage ist wie man mit sessions / sessionvariablen arbeiten kann. Also ein Login Prozess und eine Benutzerregistration/Verwaltung. nach dem Login soll jetzt der User zB mit namen begrüßt werden oder es sollen anhand einer id in einer session variable immer wieder andere userdaten ausgelesen werden (natürlich die des aktuellen benutzers) oder zugriffsrechte überprüft werden.

    Wenn mir jemand dazu vll. einen Lösungsansatz zeigen könnte wäre ich von diesem bis jetzt recht sympatischen framework überzeugt.

    lg
    Ulm

  22. Marco Am 1. März 2008 um 08:23 Uhr

    Hey dievo,

    vielen Dank für das super Tutorial.
    Habe lange nach einem guten Einstieg in cakephp gesucht und bin hier fündig geworden…

    Das Tutorial ist angenehm zu lesen und was ganz besonders toll ist: Es funktioniert :-)

    Wie wärs im nächsten Teil mit nem Login Script, damit nur der Author Texte verfassen kann?

    Mach weiter so.

    Werde auf jeden Fall wieder vorbei schauen…

  23. Matthias Am 10. März 2008 um 23:19 Uhr

    Hey!
    Ich kann mich nur anschließen: Vielen Dank für dieses gelungene Tutorial :)
    Wie man eine Authentifizierung realisiert interessiert auch mich sehr.
    Matthias

  24. Mike Am 22. März 2008 um 21:07 Uhr

    Hai !!
    Nachdem ich im zweiten Teil eine kleine Hürde nehmen mußte bin auch ich ans Ende des Tuts angelangt. Ich muss sagen dass ich Blut geleckt habe und mehr über die Möglichkeiten in Form dieses Tuts lernen möchte.
    Ein riesen Lob für die Arbeit !!
    Ich warte ungeduldig auf Teil 5.

    Gruss Mike

  25. Shador Am 20. April 2008 um 13:39 Uhr

    Hallo!
    ich hab das Tutorial inzwischen schon so überflogen und mir gleich gedacht, das es genau das ist was ich jetzt brauche.
    Als ich mir dann, aber die Dateien runter laden wollte, um alles in Ruhe durchzuarbeiten, musste ich feststellen, dass der Downloadlink nicht mehr geht.
    Es kam folgendes:
    Not Found
    Error: The requested address ‘files/tutorial_teil1_4.zip’ was not found on this server.

    Kann da vielleicht mal jemand schauen, woran das liegt und wenn möglich beheben.
    Fände ich wirklich toll.
    Danke.

    Shador

  26. Thomas Am 24. April 2008 um 16:28 Uhr

    Ich habe Probleme die Session Variablen im CommentsController auszulesen. Ich kann sie in der Component und in der View ausgeben lassen. Wird aber das Formular gesendet scheint die Session Variable komplett leer zu sein wenn der Controller darauf zugreift. Hat jemand eine Idee woran das liegen könnte?

    Thomas

  27. Christian Am 7. Mai 2008 um 16:38 Uhr

    Dieser Blog hat mir den Einstieg in Cake sehr erleichtert. Danke. Derzeit kriege ich alleine aber folgendes Problem einfach nicht gelöst. Es geht darum, die Usereingabe im Kommentar-Formular zu validieren. Über die grundsätzliche Vorgehensweise bin ich mir im klaren, in allen anderen Teilen der Applikation funktioniert es ja auch so wie ich mir das wünsche. Aber sobald im $form->create ein Array drinsteckt, klemmt es.

    Beispiel: create(‘Comment’, array(‘action’=>‘add/’.$post[‘Post’][‘id’]));?>

    Ich validiere den Input von ‘Autor’ und ‘Inhalt’, wenn alle Eingaben passen, läuft alles wunderbar und der Kommentar wird wie gewünscht in die DB geschrieben und angezeigt. Wenn die Eingabe aber nicht passt, wird nicht meine gewünschte Meldung (’Die maximale Länge des Kommentars darf nicht 200 Zeichen überschreiten’) angezeigt, sondern nur eine Fehlerseite geladen, wo der Controller meldet dass er die ‘add’ seite nicht findet. Kann mir bitte jemand hier helfen? Vielen Dank im Vorraus!

  28. dievo Am 7. Mai 2008 um 17:29 Uhr

    Dass dein Controller die add-Seite nicht finden kann, ist klar, denn einen direkten View gibt es im Comment Controller nicht. Versuch mal folgendes:
    if ($this->Comment->save($this->data))
    {
    …wenn alles funktioniert…
    } else {
    $this->Session->setFlash(‘Fehler: bitte Eingabe überprüfen’); $this->redirect($this->referer());
    }
    So wird automatisch bei einem fehlerhaften Validierung die Ausgangsseite wieder aufgerufen und der Fehlerbericht ausgegebenn.

  29. Tobi Am 9. Mai 2008 um 08:35 Uhr

    Hallihallo,

    ganz herzlichen Dank für das wunderbare Tutorial. Du hast mich jedenfalls dazu bewegt, mir Cake mal näher anzusehen. ;-)
    Ich freue mich schon auf weitere Teile!

    Gruß
    Tobi

Einen Kommentar schreiben