German (Deutsch) translation by Valentina (you can also view the original English article)
Sparks ist ein neues Paketverwaltungssystem für CodeIgniter, das den Kern mit Unterstützung für edelsteinartige Sparks erweitert.
Dieses Tutorial verwebt einen Einstiegsüberblick über die Architektur und Verwendung des Sparks-Systems mit der Erstellung von Taubenschlag - ein einfacher Funke für die Verwaltung von RSS-Daten.
Einführung
Pakete sind Blöcke von recycelbarem Code, die das Leben von Entwicklern erheblich erleichtern können.
Die Entwickler von CodeIgniter haben sich lange Zeit mit Paketmanagern wie Gems und npm beschäftigt, Systemen, die ihre jeweiligen Communities mit Werkzeuge und einem zentralen Repository für die Entwicklung, das Recycling und den Austausch nützlicher Anwendungskomponenten untereinander ausstatten. Jetzt ist das Warten vorbei. Dank eines neuen Systems - Funken - können sich CodeIgniter-Entwickler endlich freuen, da ein wachsendes Paketverwaltungssystem endlich ihr eigenes ist.
Überblick
Wenn Sie zuvor noch nicht mit ihnen gearbeitet haben, stellen Sie sich Pakete einfach als Blöcke recycelbaren Codes vor, die das Leben von Entwicklern erheblich erleichtern können. Möglicherweise benötigen Sie eine Schnittstelle zu einem Speicherbereich in der Amazon-Cloud? Überspringen Sie die späten Nächte, in denen die S3-Dokumentation überhäuft wird, und greifen Sie einfach zu Spark.
Das Spark-System besteht seinerseits aus drei Teilen:
- Ein zentrales Repository (getsparks.org) zum Speichern und Teilen von Spark
- Ein Dienstprogramm zum Verwalten der in einer bestimmten CodeIgniter-App installierten Sparks
- Die Sparks selbst
Für die Zwecke dieses Tutorials werden die ersten beiden vorgestellt, aber wir konzentrieren uns auf die Spark-Entwicklung und einige grundlegende Überlegungen bei der Entwicklung eines Sparks. Klingt gut? Mal sehen, wie es geht.
Schritt 1: Sparks installieren
Es ist offiziell: Sparks soll in den Kern von CodeIgniter integriert werden, möglicherweise bereits in der kommenden Version 2.1. Da es jedoch noch nicht Teil einer Standardinstallation ist, müssen Sie das System manuell einrichten.
Wenn Sie unter OSX oder Linux arbeiten oder wenn die Befehlszeilenschnittstelle von PHP unter Windows installiert ist, ist die Installation so einfach wie die Installation einer sauberen Kopie von CodeIgniter und die Ausgabe der folgenden Informationen im Installationsverzeichnis:
1 |
$ php -r "$(curl -fsSL http://getsparks.org/go-sparks)" |
Wenn alles gut gegangen ist, sollten Sie so etwas sehen:



Wenn dies aus irgendeinem Grund nicht funktioniert hat oder wenn Sie unter Windows arbeiten und Ihrem Befehlspfad kein PHP hinzugefügt haben, können Sie Sparks auch manuell installieren. Es ist etwas mehr Arbeit, aber das Ergebnis ist das gleiche:
- Hinzufügen eines Verzeichnisses mit dem Namen
sparks
im Stammverzeichnis Ihres Codeigniter-Verzeichnisses - Hinzufügen einer benutzerdefinierten Loader-Klasse zu
application/core/MY_Loader.php
- (optional) Herunterladen und Extrahieren des Sparks-Befehlszeilenprogramms in Ihr Codeigniter-Verzeichnis
Ihre CodeIgniter-Installation sollte jetzt gepatcht werden, um Sparks zu unterstützen.
Schritt 2: Erste Schritte
Im mittelalterlichen Europa enthielt jedes Herrenhaus ein kleines Nebengebäude, in dem Tauben nisten konnten, das als Taubenschlag bezeichnet wurde. Da wir einen Funken bauen, der sowohl Tweeten als auch Feed beinhaltet, ist der Name angemessen genug. Es erfüllt aber auch die einzige Voraussetzung für die Benennung: Aufnahme in das Repository von GetSparks.org,
GetSparks-Projektnamen müssen eindeutig sein
Spark umreißen
Bevor wir codieren können, müssen wir ein Projekt gestalten. Fügen Sie im sparks
-Verzeichnis im Stammverzeichnis Ihrer CodeIgniter-Installation (erstellen Sie es, falls es nicht vorhanden ist) einen neuen Ordner hinzu, der Spark enthält:
1 |
/sparks/dovecote |
Die Konvention schreibt vor, dass Sparks nach Version geordnet sind. Daher benötigen wir einen Unterordner für den ersten Entwurf. 0.0.1
ist ein guter Anfang.
1 |
/sparks/dovecote/0.0.1 |
In diesem Ordner wird die gesamte Aktion ausgeführt. Wenn sich der Rest des Tutorials auf unser "Spark-Verzeichnis" bezieht, ist dies alles.
Die spark.info
-Datei
Bisher sieht es ziemlich kahl aus, aber wir sind bereit, sie auszufüllen. Das erste Stück in Spark - und die einzige Datei, die vom Spark-Dienstprogramm technisch benötigt wird - ist spark.info
. Erstellen Sie eine neue Datei mit dem Namen spark.info
in Ihrem Spark-Verzeichnis und fügen Sie Folgendes hinzu:
1 |
name: dovecote |
2 |
version: 0.0.1 |
3 |
compatibility: 2.0.2 |
4 |
dependencies: |
5 |
Atomizer: 0.0.1 |
6 |
tags: ["twitter","api","social"] |
Diese Felder stellen alle Informationen dar, die das Spark-Dienstprogramm benötigt, um die Version und die Abhängigkeiten aller Sparks in dieser CodeIgniter-Installation zu verwalten. Das Dienstprogramm sucht nach fünf Dingen, aber nur die ersten drei sind erforderlich:
-
name
- die eindeutige Spark-ID -
version
- aktuelle Version -
compatibility
- Mindestversion von CodeIgniter -
dependencies
-- (optional) andere Sparks, die von diesem Spark benötigt werden -
tags
-(optionale) Tags, die diesen Spark beschreiben
Auch wenn Sie nicht vorhaben, das Spark-Dienstprogramm selbst zu verwenden, ist es dennoch höflich, eine spark.info
-Datei mit jedem Spark einzuschließen, den Sie verteilen möchten. Einer der wirklichen Vorteile beim Verwalten von Funken auf diese Weise, anstatt sie direkt in das sparks
-Verzeichnis einzufügen, besteht darin, dass der Sparkmanager die Kompatibilitäts-, Abhängigkeits- und Versionsinformationen in jedem Spark verwenden kann, um ein gutes Spiel mit der aktuellen CodeIgniter-Installation zu gewährleisten - und gegenseitig. Wie wir gleich sehen werden, gibt es noch einen weiteren Vorteil: Bei Funken, die außerhalb des Manager-Dienstprogramms installiert sind, müssen die Abhängigkeiten manuell installiert werden.
Spark organisieren
Wenn die Info-Datei geschrieben ist, ist es Zeit, dem Spark eine Struktur zu geben. Erstellen Sie vier neue Ordner im Spark-Verzeichnis:
- config
- helpers
- libraries
- libraries
Wenn Sie zuvor mit CodeIgniter gearbeitet haben, handelt es sich wahrscheinlich um bekannte Namen. Die loader
-Klasse von CodeIgniter behandelt Sparks als Pakete. Dies bedeutet, dass der Inhalt dieser Verzeichnisse auf Anwendungskomponenten überprüft wird, die nicht im Verzeichnis /application
gefunden werden können. Derzeit gilt dies für fünf Arten von Ressourcen:
- configs
- helpers
- libraries
- models
- views
Schritt 3: Schreiben des Sparks
Bevor wir mit dem Codieren beginnen, nehmen Sie sich einen Moment Zeit, um sicherzustellen, dass Ihr Spark-Verzeichnis alle erforderlichen Teile enthält.



Alles in Ordnung? Fahren wir fort.
Erstellen Sie eine Datei im neu erstellten config
-Verzeichnis und nennen Sie sie dovecote.php
. Wir werden hier einige grundlegende Optionen speichern, um dem Spark mitzuteilen, wo RSS-Daten zu finden sind:
1 |
<?php /** config/dovecote.php **/ |
2 |
|
3 |
// Username to retrieve tweets from:
|
4 |
$config[ 'twitter' ] = 'getsparks'; |
5 |
|
6 |
// API endpoint to query for tweets:
|
7 |
$config[ 'twitterURL' ] = 'http://twitter.com/statuses/user_timeline/%s.rss'; |
8 |
|
9 |
// Feed carrying RSS data:
|
10 |
$config[ 'feedURL' ] = 'http://feeds.bbci.co.uk/news/rss.xml'; |
11 |
|
12 |
?>
|
Nicht viel dazu - wir haben einen Twitter-Benutzernamen (@getsparks) definiert, von dem Tweets abgerufen werden sollen, einen API-Endpunkt für die Timeline-API von Twitter bereitgestellt und eine zusätzliche URL für die Suche nach RSS-Storys hinzugefügt.
Jetzt weiß Spark, wo Daten zu finden sind. Es ist Zeit, einige Feeds abzurufen. Dazu müssen wir eine Bibliothek erstellen - nennen Sie sie dovecote.php
- und sie im libraries
-Verzeichnis speichern:
1 |
<?php /** libraries/dovecote.php **/ |
2 |
|
3 |
class dovecote { |
4 |
|
5 |
protected $ci, $timeline; |
6 |
|
7 |
public function __construct() { |
8 |
$this->ci = &get_instance(); |
9 |
}
|
10 |
|
11 |
public function retrieve() { |
12 |
|
13 |
// build twitter request URL
|
14 |
$twitterURL = sprintf( $this->option( 'twitterURL' ), $this->option( 'twitter' ) ); |
15 |
|
16 |
// get RSS Data
|
17 |
$tweets = $this->ci->atomizer->loadURL( $twitterURL ); |
18 |
$feed = $this->ci->atomizer->loadURL( $this->option( 'feedURL' ) ); |
19 |
|
20 |
// set channel information for new feed
|
21 |
$info = array( |
22 |
'title' => 'Convolved feed' |
23 |
);
|
24 |
|
25 |
// mix the two feeds together
|
26 |
$this->timeline = $feed->convolve( $tweets, $info ); |
27 |
|
28 |
return $this->timeline; |
29 |
}
|
30 |
|
31 |
public function publish() { |
32 |
header('content-type: application/rss+xml'); |
33 |
echo $this->timeline->save(); |
34 |
}
|
35 |
|
36 |
// retrieve an option ($key) from config files
|
37 |
protected function option( $key ) { |
38 |
return $this->ci->config->item( $key ); |
39 |
}
|
40 |
}
|
41 |
|
42 |
?>
|
Diese Bibliothek bietet Hilfsfunktionen zum Abrufen von Optionen aus unserer Konfigurationsdatei und zum Veröffentlichen eines RSS-Feeds. Das entscheidende Element ist jedoch retrieve()
. Diese Funktion erfasst in mehreren Schritten RSS-Daten von den in der Konfigurationsdatei von dovecote beschriebenen Anbietern:
- Zunächst wird die Adresse des Twitter-RSS-Feeds generiert. Config hat einen Benutzernamen (
twitter
) und einen Endpunkt (twitterURL
) angegeben. Jetzt werden die beiden mitsprintf
kombiniert. - Als nächstes werden die RSS-Daten in jedem Feed mithilfe der
loadURL
-Funktion deratomizer
-Bibliothek abgerufen. Diese Funktion gibt ein "AtomizerFeed
"-Objekt zurück, das einige nützliche Funktionen zum Bearbeiten von RSS-Daten bietet. - Schließlich wird die
convolve
-Operation vonAtomizerFeed
verwendet, um die Elemente der beiden Feeds zu einem einzigen Feed zu kombinieren, der zurückgegeben wird.
Zu diesem Zeitpunkt sind wir fast bereit, Taubenschlag in einer Live-Anwendung zu starten. Wir müssen nur überprüfen, ob unsere Anwendung alle Abhängigkeiten von Dovecote enthält und ob der Spark selbst korrekt geladen wird.
Schritt 4: Abhängigkeiten
Erinnern Sie sich beim Schreiben von spark.info
an die Zeile, in der wir die Abhängigkeiten von dovecote beschrieben haben:
1 |
Dependencies: |
2 |
Atomizer: 0.0.1 |
Dies bedeutet, dass Taubenschlag auf einen anderen Spark angewiesen ist - Atomizer -, um zu funktionieren. Sobald Funken in das Repository getsparks.org übernommen wurden, lädt das Manager-Dienstprogramm Abhängigkeiten automatisch herunter. Während wir in der lokalen Entwicklung bleiben, müssen wir dies jedoch selbst tun.
Wenn Sie den Funkenmanager verwenden, können Sie Atomizer installieren, indem Sie zu Ihrem CodeIgniter-Verzeichnis navigieren und die install
-Funktion des Managers aufrufen:
1 |
php tools/spark install -v0.0.2 atomizer |
Hinweis: Wenn Sie unter Windows arbeiten, müssen Sie stattdessen php tools\spark install -v0.0.2 atomizer
aufrufen.
Wenn Sie den Manager nicht verwenden oder die Installation nicht erfolgreich abgeschlossen wurde, können Sie Atomizer von Github herunterladen und in das sparks
-Verzeichnis Ihrer Anwendung neben dem Ordner mit Dovecote extrahieren.
Schritt 5: Autoloading
Bevor Dovecote für andere Teile der Anwendung verfügbar ist, müssen wir sicherstellen, dass es korrekt geladen wird. Kehren Sie zum Konfigurationsordner in Ihrem Spark-Verzeichnis zurück und fügen Sie Folgendes in eine neue Datei mit dem Namen autoload.php
ein.
1 |
<?php /** config/autoload.php **/ |
2 |
|
3 |
// load default configuration
|
4 |
$autoload['config'] = array( 'dovecote' ); |
5 |
|
6 |
// load dependency
|
7 |
$autoload['sparks'] = array( 'atomizer/0.0.2' ); |
8 |
|
9 |
// load library
|
10 |
$autoload['libraries'] = array( 'dovecote' ); |
11 |
?>
|
Immer wenn CodeIgniter einen Spark lädt, wird versucht, alle in autoload.php
aufgelisteten Ressourcen zu laden. Auf diese Weise können Sparksautoren die Ressourcen definieren, auf die Benutzer sofort zugreifen sollen, wenn sie den Spark laden. Da hier beispielsweise die dovecote
-Libliothek angegeben ist, haben wir sofort Zugriff auf die retrieve
-Funktion, sobald der Spark geladen ist.
Erwähnenswert ist, dass sich die in autoload.php
beschriebenen Ressourcen nicht im Spark-Verzeichnis befinden müssen. Solange sie sich irgendwo im Suchpfad von CodeIgniter befinden, sollte die Anwendung sie finden können. Beachten Sie, dass atomizer
im obigen Beispiel geladen wird. Es würde nicht viel nützen, die Abhängigkeiten eines Sparks aufzulisten, aber sie nicht laden zu können!
Speichern Sie die Autoload-Datei und laden Sie alles hoch. Fügen Sie im Begrüßungs-Controller in Ihrer Hauptanwendung (/application/controllers/welcome.php
) Folgendes hinzu:
1 |
public function dovecote() { |
2 |
$this->load->spark( 'dovecote/0.0.1' ); |
3 |
$this->dovecote->retrieve(); |
4 |
$this->dovecote->publish(); |
5 |
}
|
Lassen Sie uns das durchgehen:
- Wir bitten CodeIgniter, Dovecote zu laden, da alle in
config/autoload.php
angeforderten Ressourcen ebenfalls geladen werden - Die
retrieve
-Funktion von dovecote wird verwendet, um Kopien der inconfig/dovecote.php
beschriebenen RSS-Feeds abzurufen - Die durch
retrieve
erstellte kombinierte Zeitleiste wird mithilfe derpublish
-Funktion von dovecote als RSS-Feed bereitgestellt
Sehen Sie es in Aktion
Navigieren Sie zu welcome/dovecote
in Ihrem Browser, und Sie sollten mit einem RSS-Feed begrüßt werden, der die von Taubenschlag gesammelten Tweets und Artikel aufzeichnet.
Schritt 6: Auf dem Spark aufbauen
Lassen Sie uns Taubenschlag etwas nützlicher machen. Zunächst erstellen wir eine grundlegende Ansichtsvorlage, um den Titel jedes Artikels in unserer Zeitleiste anzuzeigen:
1 |
<?php /** views/dovecote_timeline.php */ ?> |
2 |
|
3 |
<h3>Recent Happenings:</h3> |
4 |
<ol>
|
5 |
<?php foreach ($items as $item): ?> |
6 |
<li><?php echo $item->title; ?></li> |
7 |
<?php endforeach; ?> |
8 |
</ol>
|
Als Nächstes machen wir die Ansicht zugänglich, indem wir eine Hilfsfunktion bereitstellen, mit der andere Teile der Anwendung die Zeitleiste in HTML rendern können.
1 |
<?php /** helpers/dovecote_helper.php */ |
2 |
|
3 |
function dovecote_timeline() { |
4 |
|
5 |
$ci = &get_instance(); |
6 |
|
7 |
$feed = $ci->dovecote->retrieve(); |
8 |
|
9 |
$data = array( |
10 |
'items' => $feed->items() |
11 |
);
|
12 |
|
13 |
$ci->load->view( 'dovecote_timeline', $data ); |
14 |
}
|
15 |
|
16 |
?>
|
Die Funktion dovecote_timeline
und ihre gleichnamige Ansicht können jetzt verwendet werden, um die Zeitleiste an einer beliebigen Stelle in unserer Anwendung zu rendern. In Übereinstimmung mit der einzigen Philosophie von CodeIgniter, die Sie nur benötigen, werden wir sie jedoch nicht automatisch über autoload.php
verfügbar machen. Stattdessen müssen wir den Helfer bei Bedarf manuell laden. Kehren Sie zum Welcome Controller Ihrer Anwendung zurück und aktualisieren Sie die dovecote
-Funktion, um eine HTML-Version des Feeds zu generieren:
1 |
public function dovecote() { |
2 |
$this->load->spark( 'dovecote/0.0.1' ); |
3 |
$this->load->helper( 'dovecote' ); |
4 |
|
5 |
$this->dovecote->retrieve(); |
6 |
|
7 |
// call the helper function
|
8 |
echo dovecote_timeline(); |
9 |
}
|
Aktualisieren Sie Ihren Browser und Sie sollten nun eine Liste aller Elemente in der Zeitleiste von dovecote sehen.



Einpacken
Herzliche Glückwünsche! Sie sind jetzt der Besitzer eines sehr einfachen Sparks, aber es gibt noch viel mehr zu tun. Bevor Sie Taubenschläge zum Handeln senden, sollten Sie zusätzliche Funktionen schreiben. Die Details liegen bei Ihnen, aber einige nützliche Funktionen können sein:
- Zwischenspeichern von API-Antworten
- Ansichten zum Verschönern der abgerufenen Daten
- Datenpersistenz zum Speichern älterer Zeitleistenelemente (überprüfen Sie zuerst die Feed-Lizenz!)
Dieses Tutorial bietet einen Überblick darüber, was mit Sparks getan werden kann, und stellt die Vorteile vor, die Sparks bei der Minimierung von Wiederholungen und der Beschleunigung der Entwicklung bieten können.
An einem eigenen Spark arbeiten? Haben Sie Probleme beim Einstieg? Teilen Sie ein wenig mehr in den Kommentaren unten und vielen Dank für das Lesen!