In diesem zweiteiligen Tutorial lernen Sie das Kraftstoff-PHP-Framework kennen. Wir fangen mit den Grundlagen an und gehen dann in Teil zwei auf einige fortgeschrittenere Themen ein! Lass uns anfangen.
Fuel ist ein neues PHP-Framework, das speziell für PHP 5.3 entwickelt wurde. Es verwendet die bewährte MVC-Architektur zur Trennung von logischem Code und kombiniert die besten Ideen einiger vorhandener Frameworks mit Verbesserungen und eigenen Ideen. Eine letzte v1.0 wurde erst kürzlich veröffentlicht, aber das Framework hat bereits nach neun Monaten intensiver Entwicklung eine große Anhängerschaft. In diesem Artikel erfahren Sie, wie Sie mit Fuel Websites erstellen. Zunächst wollen wir uns jedoch mit der Architektur beschäftigen.
Die MVC-Architektur (Model-View-Controller) wird von vielen vorhandenen Frameworks wie CodeIgniter, Zend Framework, Symphony und Ruby on Rails verwendet. Wenn Sie mit einem dieser Frameworks vertraut sind, haben Sie einen Vorsprung!
Für diejenigen, die sich mit dieser Architektur noch nicht auskennen, ist MVC ein Ansatz, um Ihren Code in Abhängigkeit von der Rolle, die er in Ihrer Anwendung spielt, zu trennen. Im Applikationsablauf beginnt es mit einem Controller, der von Fuel geladen wird. Dann wird eine Methode ausgeführt, die ermittelt, welche Daten mithilfe eines Modells abgerufen werden sollen. Danach kann der Controller entscheiden, welche Ansichten geladen werden sollen (falls vorhanden). Ansichten enthalten die Ausgaben, die Ihre Besucher sehen, AJAX-Antworten oder Fehlermeldungen.
Eine ausführlichere Erklärung von MVC aus der Perspektive des Kraftstoffs finden Sie in der Kraftstoff-MVC-Dokumentation. so gehen wir zu den guten Sachen.
Wir fangen mit einigen der Grundlagen an, um brandneue Benutzer zum Laufen zu bringen. Wenn etwas davon offensichtlich ist, dann gehen Sie bitte ein wenig weiter, um einige der aufregenderen Funktionen zu erhalten.
Die Installation ist so einfach wie das Kopieren einer Kopie von GitHub oder das Herunterladen eines ZIP-Codes von der Site. Sie können auch eine einzeilige Installation verwenden, wenn Sie ein * nix-System wie Linux, Mac OS X usw. verwenden, für das Git erforderlich ist. Die Installation von Git ist ziemlich einfach und macht die Entwicklung Ihrer Anwendungen sehr viel einfacher:
$ curl get.fuelphp.com/oil | Sch
Dadurch wird eine sehr eingeschränkte Version von "oil" installiert. Dies ist der Name des Befehlszeilenprogramms, das Sie bei der Arbeit mit Kraftstoffanwendungen verwenden können. Diese abgespeckte Version kann zum Erstellen von Anwendungen verwendet werden:
$ Öl Blog erstellen
Dadurch wird in Ihrem aktuellen Verzeichnis ein Blogordner erstellt, der das Basis-Framework enthält. Wenn Sie auf Probleme stoßen, lesen Sie die detaillierteren Installationsanweisungen.
Vorausgesetzt, Sie haben diesen Befehl in Ihrem lokalen Root-Server ausgeführt, sollten wir in der Lage sein, zu suchen http: // localhost / test / public und siehe die Begrüßungsseite.
Die Wurzel Ihrer Anwendung sollte drei Hauptelemente enthalten:
Im Brennstoff / haben wir einige wichtige Ordner:
Der wichtige Teil hier ist die App / Ordner:
Bevor wir uns mit der Theorie beschäftigen, schreiben wir etwas Code.
Löschen wir das Kraftstoff / App / Klassen / Controller / welcome.php
Controller und machen Sie unsere, genannt hallo.php
.
Fügen Sie in dieser Datei den folgenden Code hinzu:
class Controller_Hello erweitert Controller public function action_index () echo "Hello World!";
Nun, wenn wir zu stöbern http: //localhost/test/public/index.php/hello, Sie sollten "Hallo Welt!" sehen. Ausgabe an den Browser. Das action_präfix
teilt uns mit, dass dies eine routbare Methode ist und keine Callback- oder andere gemeinsam genutzte Methode. Sie können Methodennamen wie "list" verwenden, ohne dass PHP verwirrt wird.
Wenn wir wollen, dass dieser Hallo-Controller unser "Root"-Controller ist, anstatt des Jetzt gegangen welcome.php
, wir müssen nur öffnen fuel / app / config / routes.php
und ändern Sie die _root_ route
wie so:
return array ('_root_' => 'hallo', // die Standardroute);
Machen Sie eine Datei Kraftstoff / App / Ansichten / Hallo.php
und füge hinzu:
Hallo!
Hallo , wie geht's?
Ändern Sie als Nächstes Ihren Controller ein wenig:
class Controller_Hello erweitert Controller public function action_index () echo "Hello World!"; public function action_buddy ($ name = 'buddy') $ this-> response-> body = View :: factory ('Hallo', Array ('name' => $ name,);
Nun, wenn Sie laden http: //localhost/test/public/index.php/hello/buddy oder http: //localhost/test/public/index.php/hello/buddy/John , Sie werden das sehen $ name
Variable, die von der Methode an die Sicht übergeben wird. Im Wesentlichen Extrakt()
wird auf der Ansicht ausgeführt.
Wie Sie sehen, kann Fuel grundlegende Controller- / View-Elemente direkt nach dem Auspacken ausführen, aber wenn wir noch viel mehr tun wollen, müssen wir einige grundlegende Konfigurationsänderungen vornehmen. Beginnen wir mit dem Öffnen fuel / app / config / config.php
und ein paar Dinge einrichten:
/ ** * index_file - Der Name der Haupt-Bootstrap-Datei. * * Setzen Sie diese Option auf "false" oder entfernen Sie sie, wenn Sie mod_rewrite verwenden. * / 'index_file' => 'index.php',
Wenn Sie haben mod_rewrite
Wenn Sie installiert sind, können Sie diesen Wert in einen leeren String ändern, der uns entfernen lässt index.php
von unseren URLs. Es gibt eine .htaccess-Datei in der Öffentlichkeit /, die dies unterstützt.
Als Nächstes müssen wir die Datenbankkonfiguration einrichten. Wir gehen davon aus, dass es sich bei diesem Tutorial um MySQL handelt. Erstellen Sie Ihre Datenbank mit Ihrer Desktop-GUI, phpMyAdmin oder der Befehlszeile etc:
mysql> create database blog_example;
Aufmachen fuel / app / config / db.php
und setze das Kraftstoff :: ENTWICKLUNG
Array wie folgt:
Fuel :: DEVELOPMENT => array ('type' => 'mysql', 'connection' => array ('hostname' => 'localhost', 'database' => 'blog_example', 'username' => 'yourmyseluser' , 'password' => 'yourmysqlpassword', 'persistent' => false,), 'table_prefix' => ", 'charset' => 'utf8', 'caching' => false, 'profiling' => false,),
Als nächstes können wir das aktivieren orm
und Auth
Packen Sie das Paket ein, indem Sie die folgenden Zeilen unkommentieren
/ ** * Diese Pakete werden beim Start von Fuel geladen. Sie können sie auf folgende Weise angeben: * * array ('auth'); // Dies setzt voraus, dass die Pakete in sind PKGPATH
* * // Verwenden Sie dieses Format, um den Pfad zum Paket explizit anzugeben. * Array (* array ('auth' => PKGPATH.'auth / ') *); * / 'packages' => array ('orm', 'auth',),
Dieser Schritt ist nur erforderlich, wenn Sie sie verwenden möchten - was wir in diesem Tutorial machen werden.
Der letzte Schritt des Setups ist das Erstellen eines virtuellen Hosts. Ach nein brauchen Um dies zu tun, können Sie jedoch eine echte URL verwenden und entfernen /Öffentlichkeit/
von Ihrer URL. Wenn Sie Apache verwenden, sollte ein einfacher Abschnitt wie dieser den Trick ausführen:
DocumentRoot / home / phil / Sites / blog / public Servername local.blog Optionen Alle AllowOverride All
Wenn dies eine Live-Site wäre, würden wir den Servernamen als "myawesomeblog.com" anstelle von "local.blog" hinzufügen. Dies funktioniert jedoch für unsere Demo. Sobald Sie "127.0.0.1 local.blog" zu Ihrem Ordner hinzugefügt haben
/ etc / hosts
Datei, die Sie bereit sein sollten. Wenn Sie diesen Schritt überspringen möchten, passen Sie die URLs in diesem Artikel an.
Mit diesem grundlegenden Verständnis der Funktionsweise von Controllern, Ansichten und Konfiguration können Sie wahrscheinlich in die Dokumentation einsteigen und ziemlich schnell anfangen. Um wirklich loslegen zu können, ist der beste Weg das Gerüst.
Gerüste sind kein neues Konzept und sind vor allem für ihren Platz im Rahmen von Ruby on Rails bekannt. Es ist im Wesentlichen eine sehr einfache Möglichkeit, Code auf der Grundlage einiger Annahmen über die Befehlszeile zu erstellen. Sie möchten eine Entität hinzufügen, bearbeiten und löschen, für die Sie einen Namen vergeben und Felder bereitstellen. Dies geschieht durch Öl und den Unterbefehl "Öl erzeugt Gerüst
"
Wenn wir also ein einfaches Blog erstellen wollen, müssen wir nur schreiben "$ oil g scaffold post title: String Zusammenfassung: varchar [250] body: Text
"Das Öl wird sehr ausführlich darüber sein, was es tut, und sagt Ihnen alle erstellten Dateien:
Erstellen eines Modells: /home/phil/Sites/blog/fuel/app/classes/model/post.php Erstellen der Migration: /home/phil/Sites/blog/fuel/app/migrations/001_create_posts.php Erstellen eines Controllers: / home / phil / sites / blog / fuel / app / classes / controller / posts.php Ansicht erstellen: /home/phil/Sites/blogfuel/app/views/posts/index.php Ansicht erstellen: / home / phil / Sites / blog / fuel / app / views / posts / view.php Ansicht erstellen: /home/phil/Sites/blog/fuel/app/views/posts/create.php Ansicht erstellen: / home / phil / Sites / blog / fuel / app / views / posts / edit.php Erstellen der Ansicht: /home/phil/Sites/blog/fuel/app/views/posts/_form.php Erstellen der Ansicht: / home / phil / Sites / blog / fuel / app / views / template. php
Hinweis: Modelle, die mit einem Gerüst erstellt wurden, verwenden das ORM-Paket. Stellen Sie daher sicher, dass es wie oben beschrieben aktiviert ist.
Sie sehen hier ein Modell namens "Post
", eine Migration (mehr dazu später) ein Controller"Beiträge
"und eine Reihe von Ansichten. Die Felder werden alle basierend auf den angegebenen Argumenten generiert Feldname: Feldtyp [optionale Länge]
. Zum Titel
, Wir haben ": string" verwendet, das, solange Sie MySQL verwenden, Alias wird : varchar [255]
, Es wird jedoch jeder DB-Typ unterstützt.
Mit diesem Befehlslauf müssen wir unsere Migrationen ausführen. Eine Migration ist eine Reihe von Änderungen, die an einer Datenbank vorgenommen werden müssen. Dies ist nützlich, wenn mehrere Entwickler an einem Projekt arbeiten, da jeder Entwickler eine Migration hinzufügen kann und Sie einen einzelnen Befehl ausführen können, um sicherzustellen, dass Ihre lokale Kopie auf dem neuesten Stand ist. Nach dem Abrufen der neuesten Entwicklungskopie sind keine Fehler "fehlendes Feld" oder "Tabelle ist nicht vorhanden" mehr vorhanden!
Um diese Migration auszuführen, geben Sie einfach Folgendes ein:
$ oil refine migrieren Auf die neueste Version migriert: 1.
Jetzt können Sie sehen, was Öl für Sie gemacht hat, indem Sie zu gehen http://local.blog/posts
Wenn Sie Controller, Modelle und Migrationen separat erstellen möchten und nicht alle zusammen, können Sie dies problemlos tun Öl-G-Controller
, Öl g wandern
, Öl-G-Modell
, usw.
Möglicherweise haben Sie im obigen Schritt bemerkt, dass Oil eine Datei erstellt hat:
Ansicht erstellen: /home/phil/Sites/blog/fuel/app/views/template.php
Diese Option wird erstellt, wenn Sie zum ersten Mal einen Gerüstbefehl ausführen, da alle Ansichten mit einer "Vorlage" oder einem "Layout" umschlossen sind. Hierbei handelt es sich um eine Kopf- und Fußzeile, die Ihren Inhalt umgibt. Um das Standarddesign zu ändern, müssen Sie nur diese Vorlage bearbeiten, Ihr eigenes CSS hinzufügen, ein Logo hinzufügen und die gewünschten Metadaten eingeben.
Wenn Sie neue Controller manuell erstellen, können Sie 'Controller_Template
'statt des Üblichen'Regler
', um diese Vorlage um alle im Controller geladenen Ansichten zu wickeln.
Wenn Sie eine andere Vorlage für einen Controller verwenden möchten, ändern Sie einfach die $ template
Eigentum zu etwas anderem.
Klasse Benutzer erweitert Controller_Template public $ template = 'alternative';
Dies wird die Kraftstoff / App / Ansichten / Alternative.php
Ansichtsdatei statt der üblichen fuel / app / views / template.php
.
Einer der wichtigsten Aspekte einer Bewerbung ist die Formulareinreichung. Auf diese Weise werden Daten von einem Benutzer erfasst. Dies kann ein Login, ein Kommentar, eine Einkaufswagen-Kasse usw. sein. Dies geschieht normalerweise mit HTML, aber Fuel bietet einige hilfreiche Methoden, um diesen Prozess wesentlich zu vereinfachen. Sie sind optional. Wenn Sie also ein HTML-Fanatiker sind, machen Sie weiter, aber um die Dinge zu beschleunigen, lesen Sie weiter:
Titel: "));?>
Zusammenfassung: "));?>
body: "), array ('cols' => 60, 'row' => 8));?>
Dies ist ein sehr einfaches Formular, das mit beiden zusammenarbeitet erstellen
und bearbeiten
. Für jede Eingabe, wenn sie eine Übereinstimmung finden kann POST
es wird es benutzen; Andernfalls wird nach dem gesucht $ post
Variable und Eingabe des Wertes (gut für die Bearbeitung).
Der eigentliche Vorteil dieser Helfer liegt nicht in der sauberen Syntax, wie Sie vielleicht denken, sondern ermöglicht dem Framework, Ihr Formular programmgesteuert zu umschließen. Dies bedeutet, dass Fuel Attribute automatisch in alle Formulare einbetten kann, um sicherzustellen, dass Daten im richtigen Zeichensatz gesendet und aktiviert werden CRSF
(Cross-Site Request Forgery) automatisch.
Die Validierung ist eine einfache Methode, um sicherzustellen, dass bestimmte Informationen korrekt in einer Formularübermittlung bereitgestellt wurden. Sie kann bestimmten Mustern, Datentypen oder Bedingungen entsprechen und trägt dazu bei, die Integrität der Daten zu verbessern.
Standardmäßig wird die Validierung nicht von Scaffolding verwendet, da es schwierig ist, Annahmen darüber zu treffen, was der Entwickler in den Daten erwartet. Aus diesem Grund ist die Validierung optional, sie kann jedoch ganz einfach in Ihre generierten Controller eingefügt werden oder von Grund auf mit neuem arbeiten.
Schauen wir uns an, wie eine "Post erstellen" -Methode für unseren Blog aussehen kann:
öffentliche Funktion action_create ($ id = null) if (Eingabe :: Methode () == 'POST') $ val = Validation :: factory (); // Füge ein Feld für den Titel hinzu, gib ihm die Bezeichnung "Title" und mache es erforderlich. $ Val-> add ('title', 'Title') -> add_rule ('required'); // Füge nun ein weiteres Feld für die Zusammenfassung hinzu und fordere, dass es mindestens 10 und höchstens 250 Zeichen enthält. $ Val-> add ('summary', 'Summary') -> add_rule ('required') -> add_rule ('min_length.) ', 10) -> add_rule (' max_length ', 250); $ val-> add ('body', 'Article body') -> add_rule ('required'); if ($ val-> run ()) // Erzeuge einen Beitrag basierend auf der Eingabe (Array) $ post = Model_Post :: factory ($ val-> validated ()); // Versuch es und speichere es, wenn ($ post-> save ()) Session :: set_flash ('notice', 'post # hinzugefügt.'. $ Post-> id. '.'); else Session :: set_flash ('notice', 'Post konnte nicht gespeichert werden.'); Antwort :: Weiterleitung ('posts'); else $ this-> template-> set ('error', $ val-> errors ()); $ this-> template-> title = "Posts"; $ this-> template-> content = View :: factory ('posts / create');
Wir können hier sehen, dass wir der Validation-Klasse - die wie alle Klassen automatisch geladen wird - mitteilen, welche Felder uns interessieren. Wir weisen dann Regeln zu und geben ihnen Etiketten, damit Menschen sie lesen können. Ob $ val-> run ()
ist wahr
, wir machen ein neues Model_Post
Instanz mit der Fabrik und senden $ val-> validated ()
das enthält ein Array aller übermittelten Daten. Damit können wir einfach die Instanz speichern, die ORM verwendet, um alles für Sie zu erledigen.
Wenn eine der Validierungsregeln zurückkehrt falsch
, dann $ val-> run ()
wird fehlschlagen und wir erhalten eine Reihe von Fehlern in $ val-> Fehler ()
die wir dem Benutzer zurückschicken können. Der Standard template.php
sucht nach einem "Hinweis" -Stück von Flashdata (Teil der Session-Klasse) oder nach normalen Ansichtsdaten und kann einen String oder ein Array ausgeben, so dass dies perfekt funktioniert.
Mit Ihrem Wissen über Validierung und Formularerstellung können Sie mit der Erstellung beliebiger Controller-basierter Anwendungen beginnen.
Aufgaben ähneln Controllern, sie können jedoch nicht über eine URL aufgerufen oder auf irgendeine Weise weitergeleitet werden. Sie werden stattdessen über die "Öl verfeinern
"Unterbefehl im Terminal. Dies ist ideal zum Erstellen interaktiver Shellscripts, die Zugriff auf Ihre Codebase haben und das Erstellen sicherer Cron-Jobs zum Kinderspiel machen.
Einige Frameworks empfehlen die Verwendung wget
, locken
oder etwas Ähnliches zum Ausführen eines Controllers, um einen cron-Job auszuführen, aber dies kann zu potenziellen Sicherheits- oder Konsistenzbedenken führen, wenn cron-Jobs zur Neige gehen und böswillige oder unerwartete Ergebnisse verursachen. Auf diese Weise ist es vollständig vor der Außenwelt geschützt.
Ein Beispiel für eine Aufgabe finden Sie in der bereitgestellten "Roboter
"Aufgabe in Kraftstoff / App / Aufgaben / robots.php
:
Klasse Roboter öffentliche statische Funktion ausgeführt ($ speech = null) if (! isset ($ speech)) $ speech = 'KILL ALL MUMANS!'; $ eye = \ Cli :: color ("*", 'red'); return \ Cli :: color ("\" $ speech \ "_____ / / _____ \\", 'blau'). "\ n". \ Cli :: color ("____ [\\", 'blau') ). $ eye. \ Cli :: color ('---', 'blue'). $ eye. \ Cli :: color ('/] ____', 'blue'). "\ n". \ Cli: : color ("/ \\ # \\ \\ _____ / / # / \\ / \\ # \\ _. --- ._ / # / \\ / / | \\ | | / \ \\ \\ | / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | _ | _ | _ | _ | _ | | | | | | | | | | | | | | | | | _ | _ | _ | _ | _ | | _ / | __ | // \\\ \ <\\ _//^\\\\_ /> // \\\\ \\ || / | \\ //// \\\\\\\\\\\ / | \\ || / | | | | | --- | | --- | | --- | | --- | | | | | | ___ | | ___ | / \\ / \\ | _____ | | _____ | | HHHHH | | HHHHH | ", 'blue');
Um das auszuführen scherzhaft Aufgabe einfach tippen "ölroboter
" oder "Ölroboter 'Kill all Mice'
"den Roboter dazu zu bringen, etwas anderes zu sagen.
Wenn Sie jeden Schritt befolgt haben, haben Sie Fuel installiert, wissen, wo sich die wichtigen Dateien befinden, und eine grundlegende Installation für die Ausführung unter Apache konfiguriert mod_rewrite
(andere Server funktionieren ebenfalls gut) und erstellte einfache Steuerungen und Ansichten mithilfe von Formularen und Validierung. Wenn ein Gerüst verfügbar ist, um Code zu generieren, sollte es ausreichend Code zum Lernen geben!
An diesem Punkt sollten Sie über genügend Kenntnisse verfügen, um einige recht einfache Anwendungen zu erstellen und zu erstellen. Dies ist der erste Teil dieser Serie, in dem wir die Erstellung und Erweiterung von Basis-Controllern durchlaufen, um Ihre Frontend- / Backend-Trennung zu erstellen. Wir werden auch fortgeschrittenes ORM, Authentifizierungstreiber und Dateiuploads überprüfen. Bleib dran!