Manajemen Paket mudah untuk CodeIgniter dengan Sparks
() translation by (you can also view the original English article)
Sparks adalah sistem manajemen paket baru untuk CodeIgniter yang menambah core dengan dukungan untuk gem-like sparks.
Tutorial ini adalah gambaran entry-level arsitektur dan penggunaan sistem sparks dengan penciptaan dovecote — spark sederhana untuk mengelola RSS data.
Pengenalan
Paket yang blok didaur ulang kode yang dapat membuat pengembang menjadi jauh lebih mudah.
CI pengembang telah lama berliur lebih dari manajer paket seperti gems dan npm, sistem yang memberdayakan komunitas mereka masing-masing dengan tool dan repositori sentral untuk pengembangan, recycling, dan berbagi komponen aplikasi berguna dengan satu sama lain. Sekarang, menunggu atas. Berkat sistem baru — sparks — CodeIgniter pengembang dapat akhirnya bersukacita, sebagai sebuah sistem manajemen paket yang berkembang adalah akhirnya mereka punya.
Ikhtisar
Jika Anda belum bekerja dengan mereka sebelumnya, hanya berpikir paket sebagai blok recycler kode yang dapat membuat hidup pengembang jauh lebih mudah. Mungkin Anda perlu sebuah antarmuka untuk penyimpanan ember di Amazon cloud? Melewatkan larut malam yang mengalir di atas dokumentasi S3 dan hanya ambil spark.
Untuk bagiannya, sparks sistem terdiri dari tiga bagian:
- Repositori Sentral (getsparks.org) untuk menyimpan dan berbagi spark
- Sebuah utilitas untuk mengelola sparks dipasang di Aplikasi CodeIgniter yang diberikan
- Sparksnya itu
Untuk tujuan dari tutorial ini, kita akan memperkenalkan dua yang pertama tetapi fokus pada pembangunan spark dan beberapa dasar pertimbangan dalam mengembangkan percikan. Terdengar bagus? Mari kita lihat bagaimana hal itu dilakukan.
Langkah 1: Menginstal Sparks
Resmi: sparks dijadwalkan untuk integrasi ke dalam core CI, mungkin segera 2.1 rilis mendatang. Tapi karena bukan bagian dari instalasi default akan perlu untuk mengatur sistem secara manual.
Jika Anda berada di OSX atau Linux, atau jika Anda memiliki antarmuka command line PHP diinstal pada Windows, instalasi sederhana seperti menginstal salinan bersih CodeIgniter dan mengeluarkan berikut dalam direktori instalasi:
1 |
$ php -r "$(curl -fsSL http://getsparks.org/go-sparks)" |
Jika semua berjalan baik, Anda harus melihat sesuatu seperti ini:



Jika karena alasan tertentu tidak bekerja, atau jika Anda di Windows dan belum menambahkan PHP ke command path Anda, Anda juga dapat menginstal sparks secara manual. Ini adalah sedikit lebih banyak pekerjaan, tetapi hasilnya adalah sama:
- Menambahkan sebuah direktori yang dinamakan
sparks
di root direktori codeigniter Anda - Menambahkan class Loader kustom untuk application/core/MY_Loader.php
- (opsional) Men-download dan extrack spark command line utilitas ke direktori codeigniter
Instalasi CodeIgniter Anda sekarang dapat ditambal untuk mendukung sparks.
Langkah 2: Persiapan
Di abad pertengahan Eropa, setiap rumah bangsawan termasuk bangunan tambahan kecil untuk Merpati ke sarang yang disebut dovecote. Karena kami akan membangun spark yang melibatkan tweeting dan feed, nama ini cukup sesuai. Tetapi itu juga memenuhi satu-satunya persyaratan pada penamaan: dimasukkan ke dalam repositori di GetSparks.org,
GetSparks proyek nama harus unik
Menguraikan Spark
Sebelum kita dapat kode, kita akan perlu untuk tata letak proyek. Dalam direktori sparks
di root dari instalasi CodeIgniter (buat itu, jika tidak ada), menambahkan folder baru untuk memasukan spark:
1 |
/sparks/dovecote |
Konvensi mendikte bahwa sparks diorganisir oleh versi, jadi kita akan perlu subfolder terus draft pertama. 0.0.1
adalah tempat yang baik untuk memulai.
1 |
/sparks/dovecote/0.0.1 |
Folder ini adalah dimana semua aksi akan berlangsung. Ketika sisa tutorial merujuk kepada kami "direktori spark", inilah.
spark.info
File
Hal yang tampak cantik telanjang sejauh ini, tapi kita sudah siap untuk mulai mengisi mereka. Potongan pertama di spark--dan satu-satunya file yang secara teknis diperlukan oleh utilitas spark — adalah spark.info.
Buat sebuah file baru yang disebut spark.info
di direktori spark, dan tambahkan berikut:
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"] |
Bidang ini mewakili semua informasi utilitas spark yang dibutuhkan untuk mengelola versi dan dependensi semua spark api dalam instalasi CodeIgniter ini. Utilitas akan mencari lima hal, tetapi hanya tiga pertama diperlukan:
-
name
--id unik spark -
version
- versi -
compatibility
--versi CodeIgniter minimum -
dependencies
--(opsional) sparks lain diperlukan oleh spark ini -
tags
- Tag (opsional) yang menggambarkan spark ini
Bahkan jika Anda tidak berencana untuk menggunakan utilitas spark sendiri, masih sopan untuk menyertakan file spark.info
dengan spark apapun yang Anda berencana untuk mendistribusikan. Salah satu keuntungan nyata untuk mengelola spark dengan cara ini, daripada menyisipkan mereka langsung ke direktori sparks
, adalah bahwa manajer spark dapat menggunakan kompatibilitas, ketergantungan, dan informasi versi di spark masing-masing untuk memastikan baik bermain dengan arus Instalasi CodeIgniter — dan satu sama lain. Ada manfaat lain, juga, seperti yang kita lihat dalam sekejap: sparks dipasang di luar utilitas Manajer harus memiliki ketergantungan mereka diinstal secara manual.
Pengorganisasian Spark
Dengan file info ditulis, sudah waktunya untuk memberikan percikan beberapa struktur. Buat empat folder baru di spark direktori:
- config
- helpers
- libraries
- views
Jika Anda bekerja dengan CodeIgniter sebelumnya, ini adalah nama-nama yang mungkin akrab. Codeigniter loader
class memperlakukan spark sebagai paket, berarti bahwa isi dari direktori ini dicentang untuk setiap komponen aplikasi yang tidak dapat ditemukan dalam direktori /application
. Untuk sekarang, ini berlaku untuk lima jenis sumber daya:
- configs
- helpers
- libraries
- models
- views
Langkah 3: Menulis spark
Sebelum kita mulai coding, luangkan waktu untuk memastikan bahwa direktori spark berisi semua potongan-potongan yang diperlukan.



Segala sesuatu dalam rangka? Mari kita lanjutkan.
Membuat file di direktori config
baru dan namai itu dovecote.php.
Kita akan menyimpan beberapa dasar pilihan di sini untuk memberitahu spark di mana ia dapat menemukan RSS data:
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 |
?>
|
Tidak banyak untuk itu-kami telah didefinisikan pengguna twitter (@getsparks) untuk mengambil tweets, dnyaisediakan endpoint API untuk Twitter Timeline API, dan menambahkan URL tambahan untuk mencari story RSS.
Sekarang spark tahu dimana data dapat ditemukan, saatnya untuk pergi mengambil beberapa feed. Untuk melakukan ini, kita akan perlu untuk membuat Perpustakaan — menyebutnya dovecote.php
—and Simpan di direktori libraries
:
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 |
?>
|
Perpustakaan ini menyediakan fungsi-fungsi helper untuk mengambil pilihan dari file config kami dan mempublikasikan RSS feed, tetapi bagian penting adalah retrieve()
. Fungsi ini meraih RSS data dari penyedia layanan yang dijelaskan dalam file konfigurasi dovecote di dalam beberapa langkah:
- Pertama, alamat Twitter RSS feed yang dihasilkan. Config diuraikan username (
twitter
) dan endpoint (twitterURL
); Sekarang, dua digabungkan menggunakansprintf
. - Selanjutnya, data setiap feed RSS yang diakses menggunakan
loadURL
fungsi perpustakaanatomizer
. Fungsi ini mengembalikan sebuah objek "AtomizerFeed
" yang menyediakan beberapa fungsi yang berguna untuk memanipulasi RSS data. - Akhirnya,
AtomizerFeed's
convolve
operasi digunakan untuk menggabungkan kedua Feed item ke feed tunggal, yang dikembalikan.
Pada titik ini, kita sudah hampir siap untuk menjalankan dovecote dalam aplikasi live. Kita hanya perlu memeriksa untuk memastikan bahwa aplikasi kami mencakup semua dovecote's dependensi dan spark itu sendiri akan memuat dengan benar.
Langkah 4: dependensi
Ketika kami menulis spark.info
, ingat baris mana kita menggambarkan dovecote's dependensi:
1 |
Dependencies: |
2 |
Atomizer: 0.0.1 |
Ini berarti bahwa dovecote mengandalkan spark lain — Atomizer — berfungsi. Setelah sparks dikomit ke repositori getsparks.org, utilitas manager akan secara otomatis mendownload dependensi. Sementara kita tetap dalam local development, namun, kita akan perlu untuk melakukan ini dengan kita sendiri.
Jika Anda menggunakan Pengelola sparks, Anda dapat menginstal penyemprot dengan menavigasi ke direktori CodeIgniter dan menerapkan fungsi instalasi manajer:
1 |
php tools/spark install -v0.0.2 atomizer |
Catatan
: Jika Anda pada Windows, Anda akan perlu untuk memanggil php tools\spark install - atomizer v0.0.2 daripada.
Jika Anda tidak menggunakan Manajer, atau jika instalasi tidak berhasil, Anda dapat men-download Atomizer dari github dan ekstrak ke aplikasi sparks
direktori berikut ke map yang berisi dovecote.
Langkah 5: Autoloading
Sebelum dovecote akan tersedia untuk bagian lain dari aplikasi, kita harus memastikan bahwa itu akan memuat dengan benar. Kembali ke folder konfigurasi di direktori spark dan paste berikut ke file baru yang bernama autoload.php.
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 |
?>
|
Setiap kali CodeIgniter memuat sparks, itu akan mencoba untuk memuat semua sumber daya yang tercantum dalam autoload.php
juga. Hal ini memungkinkan penulis sparks untuk menentukan sumber daya bahwa pengguna harus memiliki akses langsung ke setiap kali mereka memuat sparks. Karena Perpustakaan dovecote
ditetapkan di sini, misalnya, kita akan memiliki akses langsung ke fungsi retrieve
segera setelah sparks dimuat.
It's worth menyebutkan bahwa sumber daya yang dijelaskan dalam autoload.php
tidak perlu tinggal di direktori spark. Selama berada di suatu tempat dalam path pencarian CI, aplikasi harus dapat untuk menemukan mereka. Catatan atomizer
sedang dimuat dalam contoh di atas; itu tidak akan berbuat banyak baik untuk daftar dependensi spark tetapi dapat memuat mereka!
Menyimpan autoload file, dan mari kita load semuanya. Dalam controller welcome datang dalam aplikasi utama Anda (/application/controllers/welcome.php
), tambahkan baris berikut:
1 |
public function dovecote() { |
2 |
$this->load->spark( 'dovecote/0.0.1' ); |
3 |
$this->dovecote->retrieve(); |
4 |
$this->dovecote->publish(); |
5 |
}
|
Mari kita berjalan melaluinya:
- Kami meminta CodeIgniter untuk memuat dovecote, mengetahui bahwa semua sumber daya yang diminta dalam
config/autoload.php
akan dimuat juga - Dovecote's
retrieve
fungsi digunakan untuk mendapatkan salinan RSS feed yang dijelaskan dalamconfig/dovecote.php
- Timeline gabungan diproduksi oleh
retrieve
adalah disajikan sebagai RSS feed dengan menggunakan dovecote'spublish
fungsi
Melihatnya dalam aksi
Browse ke welcome/dovecote
di browser Anda, dan Anda harus disambut dengan RSS feed tweets dan artikel dovecote yang telah dikumpulkan.
Langkah 6: Membangun Spark
Mari kita membuat dovecote sedikit lebih berguna. Pertama, kita akan membuat sebuah tampilan dasar template untuk menunjukkan judul setiap artikel di timeline kami:
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>
|
Selanjutnya, kami akan membuat tampilan dapat diakses dengan menyediakan fungsi helper yang lain bagian dari aplikasi dapat digunakan untuk membuat timeline dalam HTML.
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 |
?>
|
Fungsi dovecote_timeline
dan view eponim sekarang dapat digunakan untuk membuat timeline di manapun dalam aplikasi kita. Tetapi sesuai dengan filosofi only-what-you-need CI, kita tidak akan membuat otomatis tersedia melalui autoload.php.
Sebaliknya, kita akan perlu memuat helper secara manual setiap kali diperlukan. Kembali ke aplikasi Anda diterima controller, dan memperbarui fungsi dovecote
untuk menghasilkan versi HTML feed:
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 |
}
|
Refresh browser, dan sekarang Anda akan melihat daftar semua item dalam dovecote's timeline.



Wrapping Up
Selamat! Anda sekarang pemilik spark yang sangat sederhana, tapi ada banyak lagi yang dapat dilakukan. Sebelum mengirimkan dovecote untuk action, Anda dapat mempertimbangkan menulis fungsi tambahan. Rincian yang Anda, tapi berguna beberapa fitur mungkin termasuk:
- caching API response
- views untuk mempercantik data yang Diperoleh
- data persistence untuk menyimpan item yang lalu (periksa lisensi feed, pertama!)
Ini menawarkan tutorial garis paling sederhana apa yang dapat dilakukan dengan spark dan memperkenalkan keuntungan spark yang dapat menyediakan dalam meminimalkan pengulangan dan mempercepat pengembangan.
Bekerja pada spark Anda sendiri? Mengalami masalah mendapatkan mulai? Berbagi sedikit lebih di komentar di bawah ini dan terima kasih banyak untuk membaca!