Mit CakePHP in einer Stunde und zwei Minuten zur Applikation
30. Oktober 2009 Roland
Reiserischer Titel gelle?
Ich möchte hier kurz zusammenstellen was es braucht um in einer Stunde eine komplette Applikation mit CakePHP zu erstellen.
6:51 Uhr: Definition der Vision
Gut, zuerst brauchen wir mal eine Vision die wir umsetzen wollen.
In meinem Fall möchte ich einen Datenspeicher haben in dem ich schnell mein Gewicht eingeben kann.
Das bedeutet, dass ich mit der Applikation die Resultate vom Wiegen abspeichern will.
In der ersten Version dieser Applikation soll also eine Eingabemaske zur Verfügung stehen, mit der man sein Gewicht in kg (z.B. 83,7kg) eingegeben werden kann.
Da es mir peinlich ist, mein tatsächliches Gewicht öffentlich zu machen, möchte ich dieses Gewicht in einem Bereich abspeichern der nur über User – Passwort zu erreichen ist.
Alle Anwender, die dieses System verwenden, sollen mit dem gleichen User-Passwort einsteigen können. Z.B. können so alle Teilnehmer einer Fett-Weg Aktion ihre Ergebnise untereinander diskutieren.
6:53 Uhr: Festlegung der umzusetzenden Komponenten
Ich möchte in einer Stunde fertig sein. Der Grund ist ganz einfach, ich sitze im Zug und in einer Stunde bin ich am Arbeitsort angekommen. Also kann ich nicht so viel umsetzen.
Was will ich also realisieren?
Modell für die Anwender
Jeder Anwender soll sich durch Name, Vorname und eine Beschreibung im System outen.
Also braucht es eine Datenbanktabelle mit folgendem Inhalt:
-
CREATE TABLE `users`(
-
`id` int(11) NOT NULL auto_increment primary key,
-
`name` varchar(200) NOT NULL,
-
`surname` varchar(200) NOT NULL,
-
`description` text NOT NULL,
-
`created` datetime NOT NULL,
-
`modified` datetime NOT NULL
-
);
Modell für die Gewichtseingabe
Ich möchte ein Modell haben in dem die Gewichtsverläufe der Personen eingetragen werden kann.
Also eine Datenbanktabelle, die folgenden Tabelle zur Verfügung stellt:
-
CREATE TABLE `weights`(
-
`id` int(11) NOT NULL auto_increment primary key,
-
`user_id` int(11) NOT NULL,
-
`weight` varchar(40) NOT NULL,
-
`created` datetime NOT NULL,
-
`modified` datetime NOT NULL
-
);
Mit user_id kann eine Verknüpfung zum jeweilgen Anwender erfolgen. Damit können wir also die Relation Gewicht->Person erstellen.
Eingabemaske Create, Read, Update, Delete (CRUD)
Um das Gewicht zu verwalten möchte ich Create, Read, Update und Delete Eingabemasken haben.
Userverwaltung
Die Anwender sollen sich über ein User-Passwort am System anmelden können. Jeder Anwender erhält dieses Passwort vom Administrator zugestellt. Das ist also nicht Teil dieser 1h Übung.
7:06 Vorbereiten des Servers
So, genug Design. Jetzt gehts los!
Zuerst erstellen wir mal die Datenbanktabellen.
Anlegen der Datenbank
Wir wählen uns mit mysql -u root -p an unserer Datenbank an.
Dann erstellen wir eine neue Datenbank mit create database weights.
Localhost Einstellen
Ich bin auf meiner kleinen Entwicklungsmaschine tätig. Im /etc/hosts füge ich die neue Webapplikation weight hinzu.
Eclipse Projekt anlegen
In meinem Workspace (/home/roland/workspace) lege ich mit Eclipse ein neues PHP Projekt mit dem Namen weight an.
CakePHP Installieren
Ich habe Cake vor kurzem heruntergeladen.
Ich wechsle mit einer Konsole in das Verzeichnis in dem die Zip-Datei liegt (z.B. /home/roland/Downloads) und führe folgende Befehle aus:
-
cp cake_1.2.5.tar.bz2 /home/roland/workspace/weight/
-
cd ~/workspace/weight
-
bunzip2 cake_1.2.5.tar.bz2
-
tar xvf cake_1.2.5.tar
-
rm cake_1.2.5.tar
-
cd cake_1.2.5/
-
mv * ../.
-
cd ..
-
rm -r cake_1.2.5
Jetzt ist Cake soweit mal installiert.
Damit das Caching funktioniert, müssen noch die Rechte geradegebogen werden.
-
cd ~/workspace/tmp
-
chmod -R a+rw cache
-
cd ..
-
chmod a+rw tmp
Jetzt muss noch der Security Salt in ~/workspace/weight/app/config/core.php verändert werden.
Suche die Zeile Configure::write(’Security.salt’, und ändere den Wert um.
Datenbankkonfiguration innerhalb von Cake
Kopiere die Datei ~/workspace/weight/app/config/database.php.default nach ~/workspace/weight/app/config/database.php und füge die Zugangsdaten zu deiner Datenbank ein.
vhost konfigurieren
Bei Gentoo wird im /etc/apache2/vhosts.d ein neuer Virtual Host eingerichtet:
-
NameVirtualHost weight
-
<virtualhost weight>
-
ServerName weight
-
ServerAdmin webmaster@localhost
-
DocumentRoot /home/roland/workspace/weight/app/webroot
-
<directory /home/roland/workspace/weight/app/webroot>
-
Options Indexes FollowSymLinks
-
Order allow,deny
-
AllowOverride FileInfo Indexes Limit
-
Allow from all
-
</directory>
-
</virtualhost>
Wie ihr sehen könnt, wird meine Applikation in meinem Home-Verzeichnis im Eclipse Standard workspace abgelegt.
Nicht vergessen mit /etc/init.d/apache2 restart den Webserver neu starten.
Probiere kurz mal mit einem Webbrowser aus, ob die Applikation hochkommt und die Datenbank usw. erreicht werden kann.
Das kannst du mit http://weight/ als Adresse erreichen.
7:32 Uhr: Modelle erstellen
So, die Applikation ist installiert.
Gehe im Eclipse zu deinem (noch leeren) Projekt und drücke refresh. Nun können wir in Eclipse die notwendigen Dateien editieren.
Wechsle nun ins Verzeichnis /app/config/sql und erstelle die Datei create_tables.php
Füge dort die Create Statements, die ich oben definiert habe, ein.
Gehe in eine Konsole und wechsle in /app/config/sql Verzeichnis.
Erstelle die Datenbanktabellen mit dem Befehl mysql -u root -p weights < create_tables.sql.
Nun sind die Datenbanktabellen vorhanden.
Wechsle ins /app Verzeichnis und lege mit cake bake die Modelle, Controller und Views an.
Dazu kannst du dem Menü Folgen und die Modelle zuerst anlegen. Bitte achte darauf, dass du die Relation hasone und belongsto in den Modellen mit reinfummelst.
Testen der Applikation
Mit http://weight/users solltest du nun die CRUD Methoden für die Userverwaltung vorfinden.
Mit http://weight/weights solltest du in der Lage sein ein Gewicht für einen User anzulegen.
7:44Uhr: Security reinfummeln
Füge in der Datei /app/config/bootstrap.php den Eintrag Configure::load(’config’); hinein.
Dann erstelle eine Datei in /app/config/config.php.
In diese Datei trägst du die folgende Zeilen ein:
-
< ?php
-
/**
-
* Angabe des erlaubten Administrator Users und dessen Passwort.
-
*/
-
$config['adminCredentials'] = array('user' => 'horscht', 'password' => 'supi');
-
?>
Im /app/controllers/users_controller.php fügst du die folgende Funktion ein:
-
var $components = array('Security');
-
/**
-
* Einbinden der Security Konfiguration und Laden der Konfiguration
-
* @see cake/libs/controller/Controller#beforeFilter()
-
*/
-
function beforeFilter(){
-
$user = Configure::read('adminCredentials.user');
-
$password = Configure::read('adminCredentials.password');
-
$this->Security->requireLogin('add', 'edit', 'delete', 'index', 'view');
-
$this->Security->loginOptions = array('type' => 'basic');
-
$this->Security->loginUsers = array($user => $password);;
-
}
Das Gleiche fügst du im /app/controllers/weights_controller.php ein.
Ok, das ist Code-Replikation und sollte in die Basisklasse rein, aber meine Stunde ist gleich rum
7:53: Fertig
Das war knapp!
Ich hatte mich noch ein paarmal vertippt. Aber die Applikation läuft jetzt und kann angesprochen werden.
Natürlich sollte jetzt die Aufräumaktion kommen und alles schön verlinkt werden. Aber immerhin, in einer Stunde ist eine funktionsfähige Applikation und dieser Blogartikel entstanden.
Cool gelle?
Artikel mit ähnlichen Schlagwörtern
Der Beitrag wurde am Freitag, den 30. Oktober 2009 um 20:29 Uhr veröffentlicht und wurde unter IT, Programmieren abgelegt.
Dir gefiel der Artikel? Dann abonniere doch den RSS Feed![]()
Du kannst die Kommentare zu diesem Eintrag durch den RSS 2.0 Feed verfolgen. Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.









[...] interessiert brennend, wie Ihr solche Sachen löst. Zum Beispiel Roland, der ja immerzu solche Datenbank-Dinger baut, hat sicherlich einen Ansatz bereit, um es anders und besser zu bewerkstelligen. Gibt es [...]
[...] hätte ich gerne mit CakePHP etwas gebaut, aber damit bin ich noch nicht so weit. Ich muss Roland nochmals dazu bringen, dass er erneut eine Session an einem Barcamp irgendwo im nördlichen [...]