Freitag, 29. August 2008

entwickler.com Magazine Konferenzen Entwickler Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag





November 2007
aus PHP Magazin Ausgabe: 6.2007
Kuchen backen!
Agile Webapplikationen mit dem CakePHP-Framework



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:

<?php

class FeedItemsController extends AppController {


var $name = 'FeedItems';

var $scaffold;

}

?>

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):

<?php

class FeedsController extends AppController {


var $name = 'Feeds';

var $helpers = array('Html', 'Form' );


function index() {

$this->Feed->recursive = 0;

$this->set('feeds', $this->Feed->findAll());

}


function view($id = null) {

if (!$id) {

$this->Session->setFlash('Invalid id for Feed.');

$this->redirect('/feeds/index');

}

$this->set('feed', $this->Feed->read(null, $id));

}


function add() {

if (empty($this->data)) {

$this->render();

} else {

$this->cleanUpFields();

if ($this->Feed->save($this->data)) {

$this->Session->setFlash('The Feed has been saved');

$this->redirect('/feeds/index');

} else {

$this->Session->setFlash('Please correct errors below.');

}

}

}


function edit($id = null) {

if (empty($this->data)) {

if (!$id) {

$this->Session->setFlash('Invalid id for Feed');

$this->redirect('/feeds/index');

}

$this->data = $this->Feed->read(null, $id);

} else {

$this->cleanUpFields();

if ($this->Feed->save($this->data)) {

$this->Session->setFlash('The Feed has been saved');

$this->redirect('/feeds/index');

} else {

$this->Session->setFlash('Please correct errors below.');

}

}

}


function delete($id = null) {

if (!$id) {

$this->Session->setFlash('Invalid id for Feed');

$this->redirect('/feeds/index');

}

if ($this->Feed->del($id)) {

$this->Session->setFlash('The Feed deleted: id '.$id.'');

$this->redirect('/feeds/index');

}

}


}

?>

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
    Hat Ihnen dieser Artikel gefallen? Dann abonnieren Sie das PHP Magazin direkt über unser

zur vorherigen Seite
zurück
an den Anfang der Seite
nach oben
Diesen Artikel drucken
drucken
Diesen Artikel weiterempfehlen
empfehlen

Software & Support Verlag GmbH