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.