Erste Schritte mit CakePHP: Ein Veranstaltungsmanager

Avatar of Roma Azarov
Roma Azarov am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Das Folgende ist ein Gastbeitrag von Roma Azarov. Ich konnte ihm leicht folgen und hatte die Demo-App in wenigen Minuten auf meinem Rechner zum Laufen gebracht. Es ist ziemlich cool, wie einfach es geworden ist, schnell leistungsstarke Webanwendungen zu erstellen.

CakePHP ist ein kostenloses, quelloffenes Framework für schnelle Entwicklung in PHP. Es ist eine grundlegende Struktur für Programmierer, um Webanwendungen zu erstellen, und ermöglicht es Ihnen, strukturiert und schnell zu arbeiten – ohne Flexibilitätsverlust. In diesem Tutorial werden wir die Vorteile der Verwendung von CakePHP untersuchen und ein Beispielprojekt, eine Event-Manager-Anwendung, bereitstellen, um Ihnen den Einstieg zu erleichtern.

CakePHP nimmt die Monotonie aus der Webentwicklung. Wir stellen Ihnen alle Werkzeuge zur Verfügung, die Sie benötigen, um mit dem Coden dessen zu beginnen, was Sie wirklich erledigen müssen: die Logik, die spezifisch für Ihre Anwendung ist. Anstatt jedes Mal das Rad neu zu erfinden, wenn Sie sich an ein neues Projekt setzen, holen Sie sich eine Kopie von CakePHP und beginnen Sie mit dem eigentlichen Kern Ihrer Anwendung. CakePHP hat ein aktives Entwicklungsteam und eine Community, die dem Projekt einen großen Wert verleihen. Neben der Vermeidung von Rad-Neuerfindungen ist der Kern Ihrer Anwendung gut getestet und wird ständig verbessert.

Hier ist eine kurze Liste von Funktionen, die Sie bei der Verwendung von CakePHP genießen werden

  • Aktive, freundliche Community
  • Flexible Lizenzierung
  • Kompatibel mit PHP-Versionen 4 und 5
  • Integriertes CRUD für Datenbankinteraktion
  • Anwendungsskelett
  • Code-Generierung
  • MVC (Model, View, Controller) Architektur
  • Request-Dispatcher mit sauberen, benutzerdefinierten URLs und Routen
  • Integrierte Validierung
  • Schnelle und flexible Vorlagen (PHP-Syntax, mit Helfern)
  • View-Helfer für AJAX, JavaScript, HTML-Formulare und mehr
  • Komponenten für E-Mail, Cookie, Sicherheit, Sitzung und Anforderungsbehandlung
  • Flexibles ACL (Access Control List)
  • Datenbereinigung
  • Flexibles Caching
  • Lokalisierung
  • Funktioniert von jedem Webseitenverzeichnis aus, mit wenig bis gar keiner Apache-Konfiguration

Idee

Die Hauptidee unseres Tutorials ist die Erstellung eines einfachen Event-Managers mit CakePHP. Unser Projekt wird

  • Events erstellen/aktualisieren/löschen mit oder ohne angehängtem Ort (Dies wird oft als CRUD-Anwendung bezeichnet)
  • Orte erstellen/aktualisieren/löschen
  • Alle Events in einer **Listenansicht** oder **Kalenderansicht** anzeigen
  • Einen RSS-Feed für alle Events bereitstellen

Unser Projekt beinhaltet auch diese fortgeschrittenen technischen Konzepte

  • Verwendung von Drittanbieter-Komponenten (Swift Mailer)
  • AJAX-Funktionalität (jQuery + CakePHP)
  • Benutzerdefinierte Helfer
  • Benutzerdefinierte Benutzerzugriffskontrolle (basierend auf Benutzerrolle)
  • Backend erstellen

Dies sind die Dinge, die Sie für dieses Projekt benötigen

  1. Apache-Webserver mit aktiviertem mod_rewrite
  2. PHP-Version 5 oder höher
  3. MySQL
  4. SVN-Client

Projektinstallation

Wenn Sie lokal arbeiten möchten, kann ein Tool wie MAMP/LAMP/WAMP eine gute Wahl sein. Sie können eine lokale Entwicklungdomain erstellen und von dort aus arbeiten.

Wo auch immer Sie sich entscheiden zu arbeiten, erstellen Sie einen Ordner im Stammverzeichnis Ihres Servers. Möglicherweise arbeiten Sie lokal mit einem Tool wie MAMP/WAMP/LAMP oder auf einem Online-Entwicklungsserver. Sie können ihn beliebig benennen. Navigieren Sie mit Ihrem Shell-Zugriff zu diesem Ordner und führen Sie diesen Befehl aus

svn checkout http://cakephp-tricks.googlecode.com/svn/trunk/ cakephp-tricks-read-only

Erstellen der Datenbank und SQL-Struktur

Nun müssen Sie eine neue Datenbank in MySQL erstellen. Tun Sie dies, wie auch immer Ihr Webhoster es anbietet, oder lokal können Sie ein Tool wie Sequel Pro verwenden.

Sie können sie beliebig benennen und ihr ein beliebiges Passwort geben. Dann müssen Sie dieses SQL ausführen, um die Struktur einzurichten

CREATE DATABASE `tricks_cake`;

USE `tricks_cake`;

/* Table structure for table `events` */
DROP TABLE IF EXISTS `events`;
CREATE TABLE `events` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `user_id` int(10) unsigned default NULL,
  `location_id` int(10) unsigned default NULL,
  `exp_date` datetime default NULL,
  `title` varchar(255) default '',
  `description` text,
  `url` varchar(255) default '',
  `complete` enum('yes','no') default 'no',
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

/* Table structure for table `locations` */
DROP TABLE IF EXISTS `locations`;
CREATE TABLE `locations` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `user_id` int(10) unsigned default NULL,
  `title` varchar(255) default '',
  `city` varchar(50) default '',
  `state` varchar(2) default '',
  `zip` int(10) unsigned default NULL,
  `address1` varchar(255) default '',
  `address2` varchar(255) default '',
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

/* Table structure for table `users` */
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `email` varchar(50) default '',
  `pass` varchar(50) default '',
  `enabled` enum('yes','no') default 'yes',
  `activated` enum('yes','no') default 'no',
  `ac_code` varchar(32) default '',
  `role` enum('admin','user') default 'user',
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Dieses SQL befindet sich auch im Projekt unter /app/config/schema/structure.sql

Einrichtung der Projektdateien

Nachdem wir unser CakePHP-Projekt installiert und in unserer Serverumgebung eingerichtet haben, werfen wir einen Blick auf den Code. Wir müssen einige Änderungen an den Konfigurationsdateien vornehmen.

core.php

Dies ist die Hauptkonfigurationsdatei. Sie müssen die Standardkonfigurationsdatei (unter /app/config/core.php.default) in core.php umbenennen oder kopieren, im selben Ordner. Als Nächstes müssen Sie einige benutzerdefinierte Einstellungen ändern.

Die folgenden Zeilen müssen im Code, der bereits in dieser Datei vorhanden ist, angepasst werden und helfen uns, E-Mails aus der Anwendung zu versenden (erforderlich für den Versand von Bestätigungs-E-Mails für neue Benutzer)

// SMTP
    Configure::write( 'smtp_type', 'tls' );
    Configure::write( 'smtp_timeout', 60 );
    Configure::write( 'smtp_host', 'smtp.gmail.com' );
    Configure::write( 'smtp_port', 465 );
    Configure::write( 'smtp_user', '[email protected]' );
    Configure::write( 'smtp_password', '' );
    Configure::write( 'smtp_encryption', 'ENC_SSL' );
    Configure::write( 'smtp_mail_from_name', 'noreply' );
    Configure::write( 'smtp_mail_from_addr', '[email protected]' );

Die obigen Werte stammen von einem Test-/Schrott-GMail-Konto, das wir dafür erstellt haben. Wenn Sie E-Mails von Ihrem eigenen Google-Konto versenden möchten, müssen Sie 3 Variablen ändern: smtp_user, smtp_password und smtp_mail_from_addr

Ändern Sie nun site_name Ihres Projekts in die URL, auf der es sich befindet

// globals
    Configure::write( 'site_name', 'learning-cakephp.dev' );

Es gibt weitere Werte, die Sie möglicherweise ändern möchten, wenn Sie das Projekt erweitern, aber Sie müssen dies im Moment nicht tun. Sie können mehr über die CakePHP core.php Konfigurationsvariablen hier lesen.

database.php

Dies ist die Datenbankkonfigurationsdatei. Sie müssen diese Datei (unter /app/config/database.php.default) in database.php im selben Verzeichnis umbenennen oder kopieren. Füllen Sie dann das $default-Verbindungsarray aus. Eine abgeschlossene Konfiguration sollte ungefähr so aussehen

var $default = array('driver'      => 'mysql',
                    'persistent'  => false,
                    'host'        => 'localhost',
                    'login'       => 'cakephpuser',
                    'password'    => 'c4k3roxx!',
                    'database'    => 'my_cakephp_project',
                    'prefix'      => '');

Dies sind die Datenbankverbindungsdetails von der Erstellung Ihrer Datenbank für dieses Projekt. Weitere Informationen zur Datenbankkonfiguration.

routes.php

Routing ist eine Funktion, die URLs Controller-Aktionen zuordnet. Sie wurde in CakePHP hinzugefügt, um schöne URLs konfigurierbarer und flexibler zu machen. Die Verwendung von Apache's mod_rewrite ist für die Verwendung von Routen nicht erforderlich, aber sie wird Ihre Adressleiste wesentlich aufgeräumter aussehen lassen. Sie müssen diese Datei derzeit nicht ändern, aber Sie können hier über diese Datei (für zukünftige Verwendung) lesen.

app_controller.php

Diese Datei (unter /app/app_controller.php) ist die Oberklasse für alle Controller in unserem Projekt. Wenn diese Datei existiert, werden alle Controller-Klassen von unserer app_controller erben. Wenn sie nicht existiert, werden sie von der Standarddatei der Bibliotheken unter /cake/libs/controller/app_controller.php erben. Dies ist sehr nützlich, wenn wir alle Controller erweitern müssen. Sie können mehr über die App Controller hier lesen.

app_model.php

Diese Datei (unter /app/app_model.php) ist die Oberklasse für alle Modelle im Projekt. Sie funktioniert genauso wie app_controller, aber für alle Modelle. Wenn Sie sich den Code eines beliebigen Modells ansehen (/app/models), können Sie sehen, dass wir die Eigenschaft $validationSet (anstelle der ursprünglichen $validate-Eigenschaft) verwenden, um die Liste der Validierungsschemata zu erstellen. Dies ermöglicht flexiblere Validierungsdaten, die in der Datenbank gespeichert werden. Außerdem verwenden wir app_model, um benutzerdefinierte Validierungsregeln für die Verwendung in allen Modellen zu schreiben.

address.php

Diese Datei (unter /app/views/helpers/address.php) demonstriert, wie ein benutzerdefinierter Helfer für Ihr Projekt erstellt wird. Sie können mehr über Helfer hier lesen.

Drittanbieter-Bibliotheken

Wir verwenden die Drittanbieter-Bibliothek SwiftMailer zum Versenden von E-Mails anstelle der integrierten EmailComponent, um zu demonstrieren, wie CakePHP mit Drittanbieter-Bibliotheken funktioniert. SwiftMailerComponent (unter /app/controllers/components/swift_mailer.php) wird für den Zugriff auf die SwiftMailer-Bibliothek aus unserem CakePHP-Projekt verwendet. Sie können mehr über Komponenten hier lesen.

Zusätzliche Struktur

Und schließlich ein paar Worte zur Code-Struktur. CakePHP verfügt über Controller-, Model- und View-Klassen, aber auch über zusätzliche Klassen und Objekte, die die Entwicklung in MVC etwas schneller und angenehmer machen. Komponenten, Verhaltensweisen und Helfer sind Klassen, die Erweiterbarkeit und Wiederverwendbarkeit bieten, um den MVC-Basisklassen in Ihren Anwendungen schnell Funktionalität hinzuzufügen. Im Moment bleiben wir auf einer höheren Ebene, suchen Sie also nach Details, wie Sie diese Werkzeuge später verwenden können. Sie können mehr über die Klassen hier und mehr über die CakePHP-Konventionen hier erfahren.

Zugriff auf den Admin-Bereich

  1. Registrieren Sie mindestens einen Benutzer (sich selbst).
  2. Finden Sie in Ihrer Datenbank Ihren Eintrag in der Tabelle 'users'.
  3. Ändern Sie den Wert des Feldes 'role' für Ihren Benutzer von 'user' in 'admin'.
  4. Melden Sie sich an, und Sie sehen nun den Link 'backend' in der Navigationsleiste.

Vorwärts!

Nun sind Sie bereit, unser Tutorial-Projekt zu untersuchen! Wenn Sie Ihre Entwicklungdomain im Browser besuchen, sollte die App erscheinen. Sie können sich für ein Konto registrieren, es aktivieren und dann Events und Orte erstellen/aktualisieren/löschen sowie sie in den beiden verschiedenen Ansichten anzeigen.

Schreibfehler?

Wenn Sie eine Fehlermeldung erhalten, dass Cache-Dateien nicht beschreibbar sind, stellen Sie sicher, dass der Ordner /app/tmp beschreibbar ist, und wenden Sie dann diese Berechtigungen auf alle Unterordner an.