Freitag, 9. Januar 2009


Artikel

September 2007 | Artikel

Kuchen backen! Fortsetzung, Teil 4

(Link zum Artikel: http://www.entwickler.com/php//001296)
Teil 1   Teil 2   Teil 3   Teil 4   Teil 5   

Generierter Quellcode: Controller
Bei den Controllern möchten wir uns Feed ein wenig näher anschauen. FeedItem hingegen, lassen wir ganz simpel generieren. Dazu beantworten wir die zwei ersten und damit einzigen Fragen mit y – die Erste fragt nach, ob wir interaktiv vorgehen wollen, die zweite, ob wir Scaffolding benutzen wollen. Scaffolding meint die schnelle, wenn auch sehr rudimentäre Erstellung von Prototyp-Masken. Das Produkt dieser Kurzsession (/app/controllers/feed_items_controller.php – Listing 5) fällt auch äußerst mager aus:

  1. <?php
  2. class FeedItemsController extends AppController {
  3. var $name = 'FeedItems';
  4. var $scaffold;
  5. }
  6. ?>
Controller-Klassen erben, wie man sieht, von der CakePHP-Klasse AppController. Weiter sehen wir die Variable , die den Namen des Modells enthält und die Variable . Diese schaltet die Scaffolding-Funktion für das Modell FeedItems ein, das heißt, ein Aufruf von http://localhost/cake/feed_items (ausprobieren!) zaubert schon etwas Funktionierendes auf den Browserbildschirm: eine Listenansicht und eine erste Eingabe- und Editiermaske, die die belongsTo-Assoziation berücksichtigt, indem sie ein Pulldown-Menu für die Auswahl des dazugehörenden Feed bereitstellt.

Den Controller für das Feed-Modell lassen wir uns ein wenig ausführlicher generieren, indem wir die Frage, ob wir Scaffolding benutzen wollen mit nein beantworten. Die Frage nach basic class methods beantworten wir jeweils mit ja, bei allen Weiteren genügt uns die jeweils vorgeschlagene Antwort. Den resultierende Code sieht man in Listing 6 (/app/controllers/feed_controller.php):
  1. <?php
  2. class FeedsController extends AppController {
  3. var $name = 'Feeds';
  4. var $helpers = array('Html', 'Form' );
  5. function index() {
  6. $this->Feed->recursive = 0;
  7. $this->set('feeds', $this->Feed->findAll());
  8. }
  9. function view($id = null) {
  10. if (!$id) {
  11. $this->Session->setFlash('Invalid id for Feed.');
  12. $this->redirect('/feeds/index');
  13. }
  14. $this->set('feed', $this->Feed->read(null, $id));
  15. }
  16. function add() {
  17. if (empty($this->data)) {
  18. $this->render();
  19. } else {
  20. $this->cleanUpFields();
  21. if ($this->Feed->save($this->data)) {
  22. $this->Session->setFlash('The Feed has been saved');
  23. $this->redirect('/feeds/index');
  24. } else {
  25. $this->Session->setFlash('Please correct errors below.');
  26. }
  27. }
  28. }
  29. function edit($id = null) {
  30. if (empty($this->data)) {
  31. if (!$id) {
  32. $this->Session->setFlash('Invalid id for Feed');
  33. $this->redirect('/feeds/index');
  34. }
  35. $this->data = $this->Feed->read(null, $id);
  36. } else {
  37. $this->cleanUpFields();
  38. if ($this->Feed->save($this->data)) {
  39. $this->Session->setFlash('The Feed has been saved');
  40. $this->redirect('/feeds/index');
  41. } else {
  42. $this->Session->setFlash('Please correct errors below.');
  43. }
  44. }
  45. }
  46. function delete($id = null) {
  47. if (!$id) {
  48. $this->Session->setFlash('Invalid id for Feed');
  49. $this->redirect('/feeds/index');
  50. }
  51. if ($this->Feed->del($id)) {
  52. $this->Session->setFlash('The Feed deleted: id '.$id.'');
  53. $this->redirect('/feeds/index');
  54. }
  55. }
  56. }
  57. ?>
Die hier definierten Objekt-Methoden sind die Aktionen des Controllers. Sie werden über http-Anfragen aufgerufen, index ist dabei die Standard-Aktion, die bei Anwählen von http://localhost/feeds ausgeführt wird. Add wird über http://localhost/feeds/add angesprochen und fügt, wie der Name schon sagt, neue Einträge in die Feed-Tabelle ein – der Befehl ->Feed->save(->data ist dafür verantwortlich.

Weiter sehen wir die Aktionen view, edit und delete. Der geneigte Leser merkt sofort, dass es sich hierbei um die grundlegenden CRUD-Funktionen (Create, Read, Update, Delete) handelt. Lassen wir all dies vorläufig so stehen und starten wir eine neue Bake-Session: es fehlen nämlich noch die Views, die den Output unserer im Controller definierten Aktionen übernehmen.
  1. http://www.cakephp.org
  2. http://bakery.cakephp.org
  3. http://pear.php.net/manual/de/package.xml.xml-rss.php
  4. http://bakery.cakephp.org/categories/view/4
  5. http://groups.google.ch/group/cake-php/web/cake-apps-sites-in-the-wild
  6. http://www.cakefoundation.org/pages/certification

Teil 1   Teil 2   Teil 3   Teil 4   Teil 5   

Kommentare

Gravatar rtauchnitz 17.09.2007
um 21:40 Uhr
Der Artikel ist ziemlich gut, aber kann es sein, dass die im Artikel benannten externen Links (z.B. [6]) nirgendwo ausgeschrieben sind? #zitieren
Gravatar Robert 18.09.2007
um 11:38 Uhr
Stimmt, da hatte unser CMS sich ein wenig an den Links "verschluckt". Die Links sollten jetzt aber jeweils am Ende der Seite angezeigt werden. An der Möglichkeit, die Links direkt (und automatisch) im Text einzubinden arbeiten wir bereits. Schöne Grüße,
Robert
#zitieren