« Auf dem Weg zum eigenen WordPress Theme Blog entstauben »

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:

  1. CREATE TABLE `users`(
  2.     `id` int(11) NOT NULL auto_increment primary key,
  3.     `name` varchar(200) NOT NULL,
  4.     `surname` varchar(200) NOT NULL,
  5.     `description` text NOT NULL,
  6.     `created` datetime NOT NULL,
  7.     `modified` datetime NOT NULL
  8. );

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:

  1. CREATE TABLE `weights`(
  2.     `id` int(11) NOT NULL auto_increment primary key,
  3.     `user_id` int(11) NOT NULL,
  4.     `weight` varchar(40) NOT NULL,
  5.     `created` datetime NOT NULL,
  6.     `modified` datetime NOT NULL
  7. );

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:

  1. cp cake_1.2.5.tar.bz2 /home/roland/workspace/weight/
  2. cd ~/workspace/weight
  3. bunzip2 cake_1.2.5.tar.bz2
  4. tar xvf cake_1.2.5.tar
  5. rm cake_1.2.5.tar
  6. cd cake_1.2.5/
  7. mv * ../.
  8. cd ..
  9. rm -r cake_1.2.5

Jetzt ist Cake soweit mal installiert.
Damit das Caching funktioniert, müssen noch die Rechte geradegebogen werden.

  1. cd ~/workspace/tmp
  2. chmod -R a+rw cache
  3. cd ..
  4. 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:

  1. NameVirtualHost weight
  2. <virtualhost weight>
  3.     ServerName weight
  4.     ServerAdmin webmaster@localhost
  5.     DocumentRoot /home/roland/workspace/weight/app/webroot
  6.     <directory /home/roland/workspace/weight/app/webroot>
  7.         Options Indexes FollowSymLinks
  8.         Order allow,deny
  9.         AllowOverride FileInfo Indexes Limit
  10.         Allow from all
  11.     </directory>
  12. </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:

  1. < ?php
  2. /**
  3.  * Angabe des erlaubten Administrator Users und dessen Passwort.
  4.  */
  5. $config['adminCredentials'] = array('user' =>  'horscht', 'password' => 'supi');
  6. ?>

Im /app/controllers/users_controller.php fügst du die folgende Funktion ein:

  1.    var $components = array('Security');
  2.     /**
  3.      * Einbinden der Security Konfiguration und Laden der Konfiguration
  4.      * @see cake/libs/controller/Controller#beforeFilter()
  5.      */
  6.     function beforeFilter(){
  7.         $user = Configure::read('adminCredentials.user');
  8.         $password = Configure::read('adminCredentials.password');
  9.         $this->Security->requireLogin('add', 'edit', 'delete', 'index', 'view');
  10.         $this->Security->loginOptions = array('type' => 'basic');
  11.         $this->Security->loginUsers = array($user => $password);;
  12.     }

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?

Merken und weiterempfehlen Diese Icons verlinken auf Bookmark Dienste bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • Technorati
  • Wikio DE
  • Webnews
  • MisterWong
  • Y!GG
  • Digg
  • del.icio.us

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 Feedrss

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.

2 Reaktionen zu “Mit CakePHP in einer Stunde und zwei Minuten zur Applikation”

  1. [...] 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 [...]

  2. [...] 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 [...]

Schreibe mir

Kommentare abonnieren ohne selbst zu kommentieren

zum Seitenanfang