Extensions Development
Jadikan module "berulang"mu menjadi package.
Nue Package bisa membantu kamu untuk membuat package kamu sendiri untuk menunjang pekerjaanmu. Saat ini, beberapa contoh extensions yang bisa kamu gunakan ada di https://github.com/nue-extensions.
Di halaman dokumentasi ini, saya akan mencoba mempraktekkan langkah demi langkah membuat sebuah extension sampai bisa dipublikasi dan digunakan oleh semua orang. Hasil dari contoh ini bisa dilihat di phpinfo.
Buat Extensions Baru
Untuk memulai membuat extensions baru, kamu cukup menggunakan perintah melalui terminal:
php artisan nue:extend nue-extensions/phpinfo --namespace=Nue\\PHPInfo
PENJELASAN:
nue-extensions/phpinfo
adalah nama package.Nue\\PHPInfo
adalah namespace package. Ingat! Backlashnya ada 2.
Setelah menjalankan perintah ini, nue akan men-generate direktori nue-extensions/phpinfo
, berikut struktur file yang dibuat:
The extension scaffolding generated successfully.
/.../app/Nue/Extensions/nue-extensions/phpinfo
├── LICENSE
├── README.md
├── composer.json
├── resources
│ └── views
│ └── index.blade.php
├── routes
│ └── web.php
└── src
├── PHPInfo.php
└── Http
│ └── Controllers
│ └── PHPInfoController.php
└── Models
└── Providers
└── PHPInfoServiceProvider.php
PENJELASAN RINGKAS:
resources
adalah tempat kamu meletakkan file view.src
utamanya adalah wadah kamu meletakkan logika program.routes/web.php
digunakan untuk menyimpan routing url kamu, dandatabase
untuk menempatkan file migrasi database dan seeder.
Register Extensions
Setelah extensions dibuat, selanjutnya coba untuk menghubungkannya dengan project kamu dengan menginstall extensions selayaknya menginstall package lainnya. Buka file composer.json
project kamu lalu tambahkan baris berikut:
"repositories": [
{
"type": "path",
"url": "app/Nue/Extensions/nue-extensions/phpinfo"
}
]
Kemudian eksekusi perintah berikut untuk menyelesaikan proses.
composer require nue-extensions/phpinfo
Pastikan extensions kamu telah terhubung dengan membuka http://localhost/nue/phpinfo.

Write code
Secara umum, extensions yang akan coba saya buat hanya menampilkan sebuah halaman yang menyajikan semua informasi PHP yang berasal dari fungsi phpinfo()
.
Dengan kata lain, saya hanya butuh satu route dan sebuah view tanpa memiliki database.
Selanjutnya saya akan coba menghapus beberapa direktori dan file yang tidak saya butuhkan sehingga struktur direktorinya menjadi sebagai berikut:
├── LICENSE
├── README.md
├── composer.json
├── resources
│ └── views
│ └── index.blade.php
├── routes
│ └── web.php
└── src
├── NuePHPInfo.php
└── Http
│ └── Controllers
│ └── PHPInfoController.php
└── Providers
└── PHPInfoServiceProvider.php
Routing
Berikut isi dari file route yang di generate oleh Nue, tidak ada yang perlu diubah dari ini.
<?php
Route::group([
'namespace' => 'Nue\PHPInfo\Http\Controllers',
'prefix' => 'nue'
], function() {
Route::get('phpinfo', 'PHPInfoController@index');
});
Pada prosesnya, URL dari extensions ini akan menuju ke Nue\PHPInfo\Http\Controllers\PHPInfoController
dengan method index
.
Logic Program
Saya tambahin logic untuk meng-collect phpinfo di src/PHPInfo.php
.
<?php
namespace Nue\PHPInfo;
use Novay\Nue\Extension;
class PHPInfo extends Extension
{
public $views = __DIR__.'/../resources/views';
public static function toCollection()
{
$what = static::config('what', INFO_ALL);
ob_start();
phpinfo($what);
$phpinfo = ['phpinfo' => collect()];
if (preg_match_all('#(?:<h2>(?:<a name=".*?">)?(.*?)(?:</a>)?</h2>)|(?:<tr(?: class=".*?")?><t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>)?)?</tr>)#s', ob_get_clean(), $matches, PREG_SET_ORDER)) {
collect($matches)->each(function ($match) use (&$phpinfo) {
if (strlen($match[1])) {
$phpinfo[$match[1]] = collect();
} elseif (isset($match[3])) {
$keys = array_keys($phpinfo);
$phpinfo[end($keys)][$match[2]] = isset($match[4]) ? collect([$match[3], $match[4]]) : $match[3];
} else {
$keys = array_keys($phpinfo);
$phpinfo[end($keys)][] = $match[2];
}
});
}
ob_end_clean();
return collect($phpinfo);
}
}
Controllers
Saya coba panggil logic toCollection()
dan mengirimnya ke view melalui controller.
<?php
namespace Nue\PHPInfo\Http\Controllers;
use Illuminate\Routing\Controller;
use Nue\PHPInfo\PHPInfo;
class PHPInfoController extends Controller
{
...
public function index()
{
$info = PHPInfo::toCollection();
return view('nue-phpinfo::index', compact('info'));
}
}
Views
Sederhananya, saya hanya nge-looping isi dari phpinfo ke dalam table.
Modifikasi file composer.json & README.md
Setelah extentions kamu selesai, kamu bisa mengubah isi dari file composer.json
dan mengubah isi seperti description, keywords, license dan authors dengan informasi pribadi kamu. Jangan lupa juga untuk memperbarui file README.md
yang mungkin bisa kamu isi dengan dokumentasi atau informasi apapun yang berhubungan dengan package-mu.
Remote installation
Apabila package sudah selesai dan ingin agar bisa digunakan oleh seluruh orang, kamu bisa melanjutkan langkah-langkah berikut.
Unggah ke Github
Login ke akun Github kamu, buat repository, dan ikuti perintah berikut untuk nge-push source code kamu ke Github.
git init
git remote add origin https://github.com/<your-name>/<your-repository>.git
git add .
git commit -am "Initial commit."
git push origin master
Release version
Selanjutnya rilis versi dari package kamu dengan perintah berikut:
git tag 0.0.1 && git push --tags
Sebenarnya lebih mudah nge-rilis manual lewat website Github langsung.
Submit ke Packagist.org
Langkah selanjutnya adalah mendaftarkan project kamu ke Packagist.org. Kalau kamu belum memiliki akun, cukup daftar menggunakan akun Github kamu, lalu buka menu Submit dan masukkan URL lengkap repository github kamu, lalu submit.
After the submission is complete, you can install your extension via composer.
Kunjungi https://github.com/nue-extensions untuk melihat contoh-contoh implementasi extensions yang sudah rilis.