Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Erstellen eines Admin-Panels mit dem Fuel PHP Framework

by
Difficulty:BeginnerLength:LongLanguages:

German (Deutsch) translation by Władysław Łucyszyn (you can also view the original English article)

Im ersten Teil dieser Serie haben wir uns mit den Grundlagen des FuelPHP-Frameworks befasst. In diesem zweiten Teil werden wir einen Gang höher legen und uns einigen fortgeschritteneren Themen zuwenden! Wir werden ein Admin-Panel für unsere Anwendung erstellen, die allgemeinen Verwendungszwecke des ORM behandeln und das Authentifizierungspaket verwenden, um den Zugriff einzuschränken.

Begleiten Sie mich nach der Pause, um loszulegen!


Einführung

Seit dem ersten Artikel wurde Fuel in FuelPHP umbenannt. Auch im Gegensatz zum ersten Artikel, der auf v1.0.1 basiert, erfordert dieser Artikel v1.1.0, so dass einige kleine Dinge anders sind. Alle Theorien, die Sie aus dem ersten Artikel gelernt haben, sind immer noch korrekt und es hat sich nicht viel geändert, daher sollte dies einfach sein.


Schritt 1 - Oil einrichten

Wenn Sie das Befehlszeilenprogramm Oil noch nicht installiert haben und das Glück haben, unter Linux, Mac, Solaris usw. ausgeführt zu werden, führen Sie den folgenden Befehl aus:


Schritt 2 - Erstellen Sie eine neue App

Mit dem Befehl oil können Sie neue Projekte mit wenigen Tastenanschlägen und dem Alias php oil erstellen, wenn Sie sich in Ihren FuelPHP-Anwendungen befinden:

Dadurch wird eine Blog-Anwendung für uns eingerichtet. Vorausgesetzt, Sie haben Apache oder einen anderen Webserver in Ihrem Ordner "Sites", sollten Sie in der Lage sein, die folgende URL zu laden und die Startseite anzuzeigen.

alt textalt textalt text

Nachdem FuelPHP aktiv ist und Ihr Webserver eindeutig funktioniert, können wir mit der Konfiguration unserer App beginnen.


Schritt 3 - Konfigurieren Ihrer App

Öffnen Sie Ihren bevorzugten Editor und wir richten zunächst eine Datenbankverbindung ein und konfigurieren die Anwendung. Dies ist fast identisch mit v1.0.x. Erstellen Sie also eine Datenbank und richten Sie Ihre SQL-Benutzer so ein, wie Sie es normalerweise tun. Bei der Datenbankkonfiguration gibt es zwei Unterschiede:

  • PDO ist jetzt der Standardtreiber
  • FuelPHP v1.1 verfügt jetzt über umgebungsbasierte Konfigurationsordner.

Diese Änderungen sind recht einfach, aber Sie können bei Bedarf wieder den nativen MySQL-Treiber verwenden. PDO ist für Entwickler nützlicher, da Ihre Anwendung mit nahezu jedem Datenbankmodul funktioniert, nicht nur mit den wenigen, für die spezielle FuelPHP-Treiber erstellt wurden. Das heißt, dies könnte genauso gut SQLite oder PostgreSQL sein.

Öffnen Sie einfach fuel/app/config/development/db.php und ändern Sie Ihre Konfiguration, wobei dbname=blog wie auch immer Ihre Datenbank heißt und Ihr eigener Benutzername und Passwort für den Datenbankserver:

Als nächstes müssen Sie nur die Datei fuel/app/config/config.php öffnen und die Pakete auth und orm aktivieren, wie im ersten Beitrag vorgeschlagen.

In dieser Konfigurationsdatei müssen wir eine kleine Änderung am Array whitelisted_classes vornehmen, mit der wir Validierungsobjekte an die Ansicht übergeben können:

Gruppen einrichten

Das in FuelPHP enthaltene Auth-Paket ist treiberbasiert. Standardmäßig verwenden wir "SimpleAuth", den einzigen im Paket enthaltenen Treiber. Wenn Sie mehr Erfahrung mit FuelPHP haben, können Sie benutzerdefinierte Treiber erstellen, die in die Systeme anderer Benutzer integriert werden können, z. B. Foren von Drittanbietern, Content-Management-Systeme usw.

Um Gruppen für SimpleAuth zu aktivieren, öffnen wir einfach fuel/packages/auth/config/simpleauth.php und setzen Gruppen auf Folgendes:

Dies kann natürlich alles sein, ist aber für die meisten Apps Standard und funktioniert für dieses Tutorial.


Schritt 4 - Benutzer erstellen

Während wir ein Admin-Panel erstellen, müssen wir die Benutzertabelle erstellen und sie dann mit einem Benutzerdatensatz füllen, der der erste Administrator sein wird. Wir könnten so etwas wie phpMyAdmin oder eine GUI wie Navicat verwenden, aber es ist besser, Dinge über Oil zu erledigen, damit wir in unserer Codebasis bleiben. Dies bedeutet, dass das Passwort-Hashing mit dem verwendeten Treiber korrekt gesalzen wird - und so werden wir es machen:

Dadurch wird ein Benutzermodell für uns erstellt und eine weitere Migration erstellt, die unsere Benutzertabelle erstellt, wenn die Aufgabe zum Migrieren der Ölverfeinerung ausgeführt wird. Als nächstes müssen wir einen Administrator-Benutzer erstellen, was wir wiederum über eine GUI tun können, aber wo ist der Spaß dabei?

Wir haben die Ölkonsole verwendet, um Code in Echtzeit zu schreiben und eine Antwort zu erhalten. Auth::create_user() wurde ein Benutzername, ein Passwort, eine E-Mail-Adresse und die group_id für Administratoren übergeben, für die wir vorerst nur 100 verwenden - die wir in der Konfiguration festgelegt haben. Die 1 ist eine Antwort aus dem Code, was bedeutet, dass user_id den Wert 1 hat.


Schritt 5 - Codegenerierung

Generatoren sind eine großartige Möglichkeit, eine Menge Code von Grund auf neu zu erstellen und einen laufenden Start zu erzielen.

Wie im ersten Artikel erläutert, können wir mithilfe von Gerüsten schnell große Teile einer Anwendung erstellen. Dies erfolgt über den Befehl oil und ist allesamt sehr optional, aber es ist eine großartige Möglichkeit, eine Menge Code von Grund auf neu zu erstellen. Einige Leute betrachten die Codegenerierung als "Werkzeuge für Leute, die nicht wissen, wie man programmiert" oder denken, es sei eine Art schwarze Magie, aber wenn Sie neu in einem Framework sind und nicht lernen möchten, wie man alles zusammensetzt Dann ist es gar nicht so schlecht, wenn ein System Code für Sie erstellt.

FuelPHP v1.1 geht mit der Codegenerierung noch einen kleinen Schritt weiter. Anstatt nur ein Gerüst (ungeschütztes CRUD) zu erstellen, können Sie jetzt Admin-Code generieren. Dies funktioniert genauso, implementiert jedoch eine einfache Admin-Vorlage, einen Admin-Controller usw. und verwendet das Auth-Paket, um den generierten Code zu sperren. Mit dem Twitter Bootstrap sieht alles gut genug aus, um es zu verwenden, und mit nur ein wenig Optimierung haben Sie eine App, die Sie ausliefern können.

Dies erfolgt über die Befehlszeile mit dem Befehl oil. Wir werden Code generieren und ihn dann durchgehen.

Dies ist ziemlich viel Code, da es das erste Mal ist, dass es ausgeführt wird. FuelPHP richtet einige grundlegende Vorlagen und Dateien ein und erstellt dann die MVC-Komponenten für den Beitragsabschnitt. Denken Sie daran, dies ist wie das Schreiben des Codes selbst, aber schneller. Sie können sich diese Ausgabe ansehen, indem Sie zu /blog/public/admin/posts gehen:

Posts - Admin Generated codePosts - Admin Generated codePosts - Admin Generated code

Controller verstehen

Wir haben eine Controller_Base hinzugefügt, die Logik für Ihre gesamte App enthält, sodass jeder Controller davon ausgehen kann. Die Datei enthält einfach:

Durch Erweitern von Controller_Template werden alle Ansichten automatisch von einer Vorlage umbrochen. Dann machen wir in der before()-Funktion ein wenig Logik, um den aktuellen Benutzer abzurufen und ihn als $this->current_user in Controllern und $current_user in Ansichten verfügbar zu machen.

Es wird ein weiterer Controller namens Controller_Admin erstellt, der Controller_Base erweitert. Neben der Erstellung des aktuellen Benutzers können wir überprüfen, ob ein Benutzer tatsächlich ein Administrator ist:

Sie werden feststellen, dass dieser Controller eine benutzerdefinierte Vorlage festlegt. Statt nach fuel/app/views/template.php zu suchen, sucht er nach fuel/app/views/admin/template.php. Wenn ein Benutzer nicht mit member(100) übereinstimmt - der zuvor festgelegten Administratorgruppen-ID - wird er von der Anmeldeseite gesendet.

Controller erweitern

Eine sehr praktische Funktion von FuelPHP besteht darin, dass Sie andere Controller erweitern können. Normalerweise werden sie nur direkt von der Request-Klasse geladen, nachdem sie von der URL weitergeleitet wurden. Manchmal ist es jedoch nützlich, Controller so zu erweitern, dass sie Logik oder Methoden gemeinsam nutzen. In diesem Fall prüfen wir bereits die Berechtigungen in Controller_Admin, damit wir diesen Controller erweitern können, um diese Logik wiederzuverwenden.

Controller_Admin_Posts extends Controller_Admin. Dies bedeutet, dass es dieselbe before()-Prüfung enthält und daher genauso geschützt ist wie jeder andere Controller in Ihrem Admin-Bereich.

Was jetzt?

Die Codegenerierung ist im Grunde nur der erste Schritt bei der Arbeit an einer Anwendung. Wir müssen noch unsere Formen optimieren und ein Frontend erstellen. Wenn Sie beispielsweise einen Beitrag erstellen oder bearbeiten, wird das Feld user_id als Textfeld angezeigt.


Schritt 6 - Aktualisieren der CRUD-Formulare

Wir werden unsere action_create()-Methode in fuel/app/classes/admin/posts.php ändern wollen, damit eine Liste der Benutzer verfügbar ist. Dazu können wir die Methode durch folgenden Code ersetzen:

Dies ist der gleiche Code wie zuvor mit zwei Änderungen:

Dadurch wird ein neues Ansichtsobjekt erstellt. Wir können dieser Ansicht Eigenschaften zuweisen, indem wir sie als Eigenschaften festlegen, sodass die Daten unserer Benutzer problemlos übergeben werden können und normalerweise wie folgt funktionieren:

Jetzt machen wir ein ähnliches Update zu action_edit():

Da die Ansichten create.php und edit.php jedoch ein Teilthema _form.php gemeinsam haben und die Eigenschaften nur Variablen für diese eine bestimmte Ansicht festlegen, müssen wir die Methode View::set_global() verwenden:

Dies verwendet das Model_User-Objekt, um alle unsere Benutzer abzurufen, und reduziert sie dann auf ein assoziatives Array für unser Formular.

Der HTML-Code muss jetzt geändert werden. Löschen Sie daher den Div-Wrapping-Slug. Wir machen das selbst und ändern das Feld user_id von einem Eingabefeld in ein Auswahlfeld:

User dropdown formUser dropdown formUser dropdown form

Dadurch wird das Feld so eingestellt, dass alle Benutzer angezeigt werden und standardmäßig der aktuell angemeldete Benutzer verwendet wird, wenn keine angegeben sind. Dies ist die einzige Optimierung, die wir an dieser Stelle vornehmen müssen. Machen wir also eine Vorderseite!

Die Vorderseite

Das Erstellen einer einfachen Blog-Vorderseite ist wirklich einfach, sodass Sie sich keine Gedanken über die Verwendung der Codegenerierung machen müssen.

Erstellen Sie einen neuen Controller fuel/app/classes/controller/blog.php:

Und die Ansichtsdatei fuel/app/views/blog/index.php:

Dies ist nur eine einfache Schleife durch das Array $posts, das alle Ihre Artikel enthält.

Comment formComment formComment form

Eine foreach-Schleife, ein Hyperlink und eine Zusammenfassung sind alles, was wir für diese Ansichtsdatei benötigen, und wir erstellen eine weitere Ansichtsdatei, um den Beitrag tatsächlich zu sehen. Wir rufen diese Controller-Methode action_view() auf und erstellen eine Ansichtsdatei mit dem Namen view.php:

Dies ist die Methode für den Blog-Controller:

Die find_by_slug()-Methode ist eine "magische Methode", die WHERE slug = "foo" in Ihrer Abfrage erstellt und eine einzelne Model_Post-Instanz mit diesen Daten zurückgibt.

Comment formComment formComment form

Jetzt können die Leute auf Ihre - schrecklich ungestylte - Website schauen und einen einfachen Blog sehen, und Sie haben eine Administrationsoberfläche, um ihn zu verwalten!


Schritt 7 - Verwenden des ORM

Bisher haben wir das ORM für unsere Modelle verwendet, um grundlegende CRUDs durchzuführen, aber wir haben noch nichts mit Beziehungen zu tun. Das ORM macht dies unglaublich einfach, da es aus einem bestimmten Grund für "Object Relational Mapping" steht. Um Beziehungen aufzubauen, müssen wir lediglich unsere Modelle ein wenig ändern, um zu erklären, wie das ORM die Daten in Beziehung setzen soll.

Ein Beitrag wird von einem Benutzer erstellt, daher sagen wir, dass er einem Benutzer "gehört". In Model_Post können wir hinzufügen:

Der Benutzer kann mehrere Blogs posten, daher fügen wir diese Zeile hinzu:

Eine schnelle Möglichkeit, dies zu testen, besteht darin, die Ölkonsole zu starten:

Schön, die Beziehungen funktionieren!

Jetzt können wir in der Ansicht mit $post->user arbeiten und deren Namen ausgeben. Ändern wir also den fuel/app/views/blog/view.php:

Dies auf diese Weise zu tun, wird als verzögertes lazy loading. Wenn Sie nach $post->user fragen, gibt das ORM das Benutzerobjekt basierend auf dem Inhalt des Felds user_id zurück. Dies bedeutet, dass der Beitrag abgerufen werden muss und der erste Benutzer zwei Abfragen hat, der zweite eine dritte usw., und daher kann es bei all diesen zusätzlichen Abfragen sehr langsam werden.

Um die Leistung zu verbessern, können Sie vom verzögerten Laden zum eifrigen Laden wechseln. Dies teilt dem ORM im Grunde mit, dass Sie Benutzern beitreten werden, und sollte dies als Teil der ersten Abfrage tun. Dies kann zu einer größeren Abfrage führen, aber das ORM schneidet sie gut für Sie auf und Sie werden den Unterschied nicht bemerken.

Wenn Sie sich die vom ORM erzeugte Abfrage ansehen, sieht sie ungefähr so aus:

Das mag zunächst verrückt aussehen, aber der ORM weiß genau, was los ist. Mit diesem Ansatz habe ich in der Vergangenheit eine Anwendung von mehr als 300 Abfragen auf einer ausgelasteten Seite (sehr langsam) auf etwa 2 (sehr schnell) reduziert.


Schritt 8 - Hinzufügen von Kommentaren

Viele "Make a Blog"-Tutorials hören auf, bevor sie zu Kommentaren gelangen, die meiner Meinung nach ein großes Unterfangen sind. Jedes Blog benötigt Kommentare und wir möchten sie schnell hinzufügen, damit wir etwas mehr Spaß haben und die Admin-Oberfläche mithilfe der Codegenerierung erstellen können:

Kommentare erfordern einige ähnliche Verbesserungen wie Post. Machen Sie diese, dann richten wir die Beziehungen ein.

Model_User

Model_Post

Model_Comment

Fügen Sie einen Kommentar über die Benutzeroberfläche auf betrügerische Weise hinzu, indem Sie zu http://localhost/blog/public/admin/comments/create gehen und einen eingeben

Comment adminComment adminComment admin

Jetzt können wir die Beziehung in der Konsole erneut testen:

Die Ausgabe eines Arrays von ORM-Objekten ist etwas ausführlich, aber zumindest können wir die Daten sehen. Dies bedeutet, dass die Beziehung gut funktioniert. Ändern Sie daher die ORM-Abfrage in der action_view()-Methode des Blog-Controllers, um Kommentare einzuschließen:

Aktualisieren Sie jetzt die Blog-Ansicht, um die Kommentare auszugeben, und haben Sie ein Formular, um weitere hinzuzufügen:

Dieser Code gibt alle Kommentare in einem sehr einfachen Stil aus, gefolgt von einem wirklich einfachen Formular mit Twitter Bootstrap Markup. Ich bin sicher, Sie können das Styling für den Kommentarbereich verbessern.

Comment formComment formComment form

Wir können sehen, dass der Kommentar ausgegeben wird und alle hinzugefügten Kommentare ebenfalls eingegeben werden. Die nächste und letzte Phase des Prozesses besteht also darin, Kommentare zu speichern.

Die Zeile mit Form::open('blog/comment/'.$post->slug) setzt die Aktion auf blog/comment/women-love-guys-who-use-fuelphp, was bedeutet, dass Controller_Blog eine neue Methode benötigt action_comment($slug), die ungefähr so aussehen sollte:


Zusammenfassung

In diesem Artikel wurden einige Dinge übersprungen, wie das Einrichten einer hübschen URL anstelle von localhost/blog/public und das Verwenden der Formularvalidierung im Modell oder im Controller. All dies finden Sie jedoch in der FuelPHP-Dokumentation. Ich hatte vor, etwas mehr über Datei-Uploads und Migrationen zu sprechen, aber auch dies ist bereits dokumentiert.

Sie sollten jetzt genug Code haben, um ihn auseinanderzunehmen und damit zu spielen, und für jedes Projekt, an dem Sie mit FuelPHP arbeiten, gibt es bereits einen Blog. Rufen Sie also eine Begrüßungsseite auf, entwerfen Sie sie und Sie können das nächste SquareFaceTwitBook erstellen.

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.