Erste Schritte mit Cake PHP Teil 2

In unserem letzten CakePHP-Tutorial haben wir uns mit der Einrichtung des CakePHP-Frameworks befasst und einige grundlegende Konzepte und Begriffe des Frameworks vorgestellt. Wir zeigen nun anhand eines Beispiels eine persönliche Bloganwendung, um die schnellen Entwicklungsmöglichkeiten von CakePHP zu veranschaulichen. In den nächsten Tutorials werden wir die Blog-Anwendung schrittweise so erstellen, dass der grundlegende CakePHP-Entwicklungsprozess klar und nicht wie in anderen ähnlichen Tutorials erwähnt wird. In diesem Lernprogramm beginnen wir mit einer grundlegenden Komponente zur Authoringauthentifizierung für die Beispiel-Bloganwendung.

Schritt 1: Ein Ziel definieren

Unser Ziel ist es, die Komponenten einer persönlichen Bloganwendung zu erstellen. Wenn wir das Projekt abschließen, werden wir Web 2.0-Effekte hinzufügen und die Integration mit anderen Diensten anbieten, um die Anwendung abzuschließen. Bevor wir unser Projekt beginnen können, müssen wir jedoch einen Entwicklungsplan mit einer Art Feature-Liste definieren, die uns leiten soll.

Hier ist eine kleine Liste der Hauptmerkmale, die wir besprechen und in unsere fertige Anwendung aufnehmen werden:

  • Geschütztes System mit mindestens Funktionen für einen Autor
  • Die Posting-Funktionen umfassen Kommentierungsfunktionen, stellen Trackbacks für Blogs bereit und ermöglichen die Aufnahme von Bildern und Uploads
  • Volltextsuchmaschine mit Sphinx
  • Integration mit externen Diensten wie Gravatar und Askimet Spam Protection / Spam Management
  • Javascript-Verbesserungen, einschließlich WYSIWYG-Editor-Funktionen, Ajax Live Search, Ajax-Kommentarvorschau, Schnellladen der Ajax-Funktion zum Veröffentlichen / Bearbeiten / Löschen und Ajax-Formularüberprüfung
  • Integration der Anwendung mit Facebook, um eine schnelle Entwicklung von Facebook zu ermöglichen (Ziel dieser Funktion ist das Versenden von Posts an die News-Feed-Funktion von Facebook und das Abrufen persönlicher Daten aus der Facebook-API, um das Blog etwas persönlicher zu gestalten)

In dem heutigen Artikel werden wir uns hauptsächlich auf das Benutzer- / Autorenverwaltungssystem konzentrieren, da es der perfekte Ort ist, um die Grundlagen von Controller, Modell und Ansichtscode zu erlernen. Sobald wir diese Grundlagen gelernt haben, können wir sie später für die anderen Komponenten des größeren Systems implementieren.

Kommen wir zu CakePHP.

Schritt 2: Modelle

Wie bereits erwähnt, interagieren Modelle mit der zugrunde liegenden Datenbank des Frameworks. CakePHP verfügt standardmäßig über eine Reihe von integrierten Methoden, um das Umschreiben von Code für die Implementierung allgemeiner Funktionen zu verhindern. Neben den erwarteten Lese- und Schreib- / Speichermethoden können Sie auch "magische Methoden" verwenden findBy die Zeilen finden, die einem bestimmten Abfragefeld entsprechen. Dies ist eine echte Verbesserung gegenüber typischen "SELECT * FROM" -Abfragen.

Unser Benutzersystem für diese Iteration der Anwendung wird ziemlich einfach sein. Da das Hauptziel ein persönlicher Blog ist, haben wir jeweils nur einen Autor. Aus Gründen der Erweiterbarkeit werden wir die Benutzer jedoch in einer Tabelle speichern, falls wir später ein voll entwickeltes Benutzer- / Berechtigungssystem entwickeln oder manuell weitere Autoren hinzufügen möchten. Mit unserer Basisfunktion können Sie sich anmelden, abmelden und unsere persönlichen Informationen aktualisieren.

Wir werden dies alles mit einer kleinen MySQL-Tabelle tun, die von der folgenden CREATE TABLE-Anweisung implementiert wird:

CREATE TABLE 'Autors' ('id' int (11) NOT NULL auto_increment, 'username' varchar (255) NOT NULL default "," password "varchar (32) NOT NULL default", "name" varchar (255) NOT NULL default ", 'email' varchar (255) NOT NULL default", "bio" Text NOT NULL, PRIMARY KEY ('id'))

Wir wollen auch ein einfaches Startkonto, also fügen wir eine Zeile ein, während wir gerade dabei sind (der Benutzername und das Passwort für das Startkonto sind test / test):

EINFÜGEN IN 'Autoren' ('Benutzername', 'Passwort', 'Name', 'E-Mail', 'Bio') WERTE ('Test', '098f6bcd4621d373cade4e832627b4f6', 'Test', '[email protected]', 'Hello' Welt… ');

Der Zweck der Tabellenstruktur ist folgender:

  • Ich würde Wird beim Laden des Profils für die eindeutige Benutzer-ID verwendet.
  • Nutzername wird verwendet, um sich im Verwaltungsbereich anzumelden.
  • Passwort wird ein md5-Kennwort sein, das für die Anmeldung beim Verwaltungsbereich verwendet wird.
  • Name wird in Bylines und der Autorenseite verwendet. Dies ist der öffentliche Anzeigename, da der Benutzername nicht angezeigt wird.
  • Email wird für zukünftige Funktionen verwendet (z. B. Kommentarbenachrichtigung).
  • bio werden verwendet, um biographische Informationen über einen Autor zu speichern (z. B. die Autorenseiten, die hier auf NETTUTS zu sehen sind).

Jetzt müssen wir das Modell tatsächlich erstellen. Erstellen Sie dazu eine neue Datei in der / app / models / Ordner benannt author.php mit folgenden Inhalten:

Klasse Author erweitert AppModel

var $ name = 'Autor';

?>

Das Modell für diese Funktionalität ist eigentlich ziemlich einfach. Da wir die Funktionalität brauchen, z findByUsername oder Speichern ist bereits durch Funktionen in Model (das durch AppModel erweitert wird) abgedeckt. Wir sind mit der Modellseite fertig. Diese Blankedatei ermöglicht uns lediglich die Schnittstelle zur Author-Tabelle.

Wenn wir in späteren Abschnitten Postfunktionen hinzufügen, müssen wir möglicherweise die Modelle erweitern.

Schritt 3: Ansichten

Ansichten sind hauptsächlich eine Mischung aus HTML und Helfer. In anderen Systemen würden wir diese Vorlagen nennen. Helfer generieren gemeinsamen Code oder helfen bei allgemeinen Aufgaben. Einige in CakePHP gefundene Hilfstypen sind HTML-Helfer und Paginierungs-Helfer.

Um Ansichten einzurichten, erstellen Sie einen Ordner in / app / ansichten / namens Autoren / So können wir alle unsere Ansichten speichern. Unser erster Blick sollte gerufen werden login.thtml mit folgenden Inhalten:

 

Error

Benutzername und Passwort stimmen nicht überein. Bitte versuchen Sie es erneut und überprüfen Sie die eingegebenen Informationen noch einmal.

formTag ('/ autors / login /'); ?> Eingabe ('Autor / Benutzername'); ?> Passwort ('Autor / Passwort'); ?>
einreichen ("Login"); ?>

Anstatt zu verwenden Tags verwenden wir einen der Helfer, um gültige Eingabefelder zu generieren, die in unseren Steuerungen verwendet werden können. Wir haben auch eine kleine Fehlerprüfung oben in der Vorlage vorgenommen, falls der Benutzer einen falschen Benutzernamen oder ein falsches Passwort eingibt. Die Fehlervariable wird später in der Steuerung eingestellt.

Nun, da unsere erste Aktion eine Vorlage hat, können wir zu den anderen übergehen.

Für das Abmelden ist eigentlich keine eigene Ansicht erforderlich, da die Benutzer einfach zur Blog-Indexseite zurückgeleitet werden und eine schnelle Erfolgsmeldung anzeigen. Für die Aktualisierung der Profilinformationen in der Benutzerverwaltung ist jedoch ein Formular erforderlich. Daher müssen wir dafür eine Ansicht schreiben.

Erstellen Sie eine Vorlage mit dem Namen manage.thtml mit folgenden Inhalten:

 

Error

Bitte stellen Sie sicher, dass alle erforderlichen Informationen ausgefüllt wurden.

formTag ('/ autors / manage /'); ?> Eingabe ('Autor / Name'); ?>
Eingabe ('Autor / E-Mail'); ?>
Textbereich ('Autor / Bio', Array ('Spalten' => '60', 'Zeilen' => '10')); ?>
einreichen ("Update"); ?>

Diese Ansicht ist unserem Anmeldeformular sehr ähnlich, mit der Ausnahme, dass wir einige andere Felder verwalten und eine andere Hilfsmethode ($ html-> textarea) einschließen, um einen Textbereich zu generieren.

Großartig! Nun, da unsere kleinen Ansichten geschrieben sind, können wir zu Controllern übergehen.

Schritt 4: Controller

Controller verhalten sich wie Verkehrsleiter. Sie akzeptieren Eingaben, entscheiden, was damit zu tun ist, und geben dem Rest des Systems Anweisungen zur Handhabung. Sie sind das Herzstück der Anwendung, da sie die Daten aus den Modellen übernehmen und an die korrekten Ansichten zur Anzeige weiterleiten.

Dieser Abschnitt befasst sich speziell mit dem Einrichten und Lesen einer Sitzung sowie mit dem Aktualisieren der Datenbank. Wir werden auch einen "übergeordneten" Controller erstellen, von dem alle zukünftigen Controller erben werden.

Erstellen Sie zuerst eine Datei in App / Controller / genannt hors_controller.php. Nun gehen wir Schritt für Schritt durch den Code.

Weiterleitung ('/');  function login () $ this-> set ('error', false); if (! empty ($ this-> data)) $ author = $ this-> Author-> findByUsername ($ this-> data ['Author'] ['username']); if (! empty ($ author ['Author'] ['password']) && $ author ['Author'] ['password'] == md5 ($ this-> data ['Author'] ['password']) )) $ this-> Session-> write ('Author', $ author ['Author']); $ this-> redirect ('/');  else $ this-> set ('error', true); 

Unsere Indexfunktion ist ziemlich einfach. Zur Zeit werden wir einfach mit einer integrierten CakePHP-Funktion namens "redirect" zum Skriptindex umleiten.

Unsere Login-Funktion ist etwas fortgeschrittener. Zuerst setzen wir die Fehlervariable auf false, um zu verhindern, dass PHP eine undefinierte Variable zurückwirft. Dann prüfen wir, ob Daten gesendet wurden. "$ this-> data" enthält alle Eingabedaten des Anmeldeformulars und hat das Format $ this-> data ['CONTROLLER'] ['FIELD']. Nun sehen wir unsere magische Methode "findByUsername". verwendet, um alle Zeilen zu finden, die den Benutzernamen des Benutzers enthalten, der sich gerade angemeldet hat. Wenn ein Benutzer übereinstimmt, vergleichen wir die Passwörter und schreiben eine Sitzung mit dem Session-Handler von CakePHP. Wenn ein Problem auftritt, setzen wir "error" auf "true", damit unsere Ansicht die Nachricht verarbeiten kann. Ein Login-System kann nicht viel einfacher sein!

 function logout () $ this-> Session-> delete ('Author'); $ this-> flash ('Sie wurden abgemeldet.', '/');  

Die Logout-Funktion ist noch einfacher. Wir verwenden die Session-Klasse von CakePHP, um die Session vollständig zu löschen, und dann verwenden wir die "Flash" -Methode, um umzuleiten. Die Flash-Methode unterscheidet sich ein wenig von der Weiterleitungsmethode, da wir eine Nachricht zurück an den Bildschirm senden dürfen. Dies wird nützlich, weil wir den Benutzern tatsächlich mitteilen können, dass etwas passiert ist.

Hinweis: Da wir uns noch im Entwicklungsmodus befinden, wird der Flash-Bildschirm nicht automatisch umgeleitet. Sie müssen auf den Text klicken, um zum Bildschirm zu gelangen. Wenn wir uns im Produktionsmodus befinden, wird dieser Bildschirm für uns umgeleitet.

 function manage () $ this-> set ('error', false); if (leer ($ this-> data)) $ this-> Author-> id = $ this-> Session-> read ('Author.id'); $ this-> data = $ this-> Author-> read ();  else if (leer ($ this-> data ['Autor'] ['Name']) || leer ($ this-> data ['Autor'] ['email']) || leer ($ this- > data ['Author'] ['bio'])) $ this-> set ('error', true); $ this-> Author-> id = $ this-> Session-> read ('Author.id'); $ this-> data = $ this-> Author-> read ();  else $ this-> Author-> id = $ this-> Session-> read ('Author.id'); if ($ this-> Author-> save ($ this-> data ['Author'])) $ this-> flash ('Ihre Kontoinformationen wurden aktualisiert.', '/hors / manage /');  

Unsere fortschrittlichste Funktion für diesen Controller ist die verwalten Funktion. Viele Funktionen werden mit den gerade eingeführten Techniken implementiert. In dieser Funktion ist zu beachten, dass die Variable $ this-> author-> id vor dem Sichern und Lesen gesetzt wird. Dadurch wird dem Modell mitgeteilt, mit welcher Zeile es sich befasst, so dass nicht versucht wird, eine ganze neue Zeile zu speichern oder einzufügen. Wir behandeln auch mehr Sitzungsfunktionen, indem wir die ID aus dem Hash lesen.

Der letzte Schritt besteht darin, die Verwaltungsseite zu schützen. Wir möchten nur, dass angemeldete Benutzer diese Seite sehen, und wir können mit einer einfachen Überprüfungsfunktion Schutz bieten. Dies ist eine Funktion, die wir auch für zukünftige Bildschirme benötigen werden. Daher sollten wir sie an einem gemeinsamen Ort aufbewahren. Wie bereits erwähnt, erben alle CakePHP - Controller von einem Controller mit dem Namen "AppController", der gerade eine leere Datei in der Kuchen Verzeichnis…

Wir erstellen einen anwendungsspezifischen AppController, indem Sie eine Datei mit dem Namen "app_controller.php" in dem app / Ordner und fügen Sie den folgenden Inhalt ein:

Session-> check ('Author')) $ this-> flash ('Dazu müssen Sie angemeldet sein.', '/Hors / login'); Ausfahrt; ?> 

Wir überprüfen einfach die Sitzung und falls nicht, schicken wir den Benutzer zum Anmeldebildschirm. Diese Funktion kann jetzt in jeder Controller-Methode verwendet werden.

Der letzte Schritt besteht darin, die Funktion aus unserer Verwaltungsfunktion aufzurufen. Wir öffnen unsere app / controller /hors_controller.php Datei und finde:

 function manage () $ this-> set ('error', false);

und hinzufügen

$ this-> isLoggedIn ();

direkt darunter.

Schritt: Testen Sie es

Die Aktionen können mit den folgenden URLs getestet und aufgerufen werden:

  • http: //yoursite.tld/Autoren / Login /
  • http: //yoursite.tld/Autoren / Verwalten /
  • http: //yoursite.tld/Autoren / Logout /

Der Benutzername des Kontos lautet test und das Kennwort ist test.

Schließen

Dieser Artikel sollte einige Kernfunktionen von CakePHP mit Beispielen im Zusammenhang mit dem Erstellen einer persönlichen Bloganwendung vorstellen. Wir haben mit einigen Benutzer- / Autorenseitenfunktionen begonnen, um die grundlegenden Konzepte der Anwendungsentwicklung mit CakePHP vor dem nächsten (nächsten Tutorial) dem Schreiben des Postcontrollers vorzustellen. Auf diese Weise werden wir besser verstehen, wie alles im Rahmen zusammenpasst. Es ist noch ein weiter Weg bis zur Fertigstellung unserer Blog-Anwendung. Machen Sie sich also bereit, tief in CakePHP einzutauchen, damit wir beim nächsten Mal die gesamte Blog- und Kommentarfunktion des Blogs nutzen können!