20 Library PHP yang Mengagumkan di Tahun 2017

Minggu ini kami memiliki koleksi library PHP berkualitas tinggi yang telah menarik perhatian kita dalam beberapa bulan terakhir. Kami telah mencoba untuk menyertakannya pada projek yang aktif, terdokumentasi dengan baik dan akan memiliki kesempatan yang realistis dalam menentukan di tempat kerja developer Anda.

Jika kita belum memasukan library baru favorit Anda, jangan ragu untuk membagikannya di komentar.

Requests for PHP

Library tanpa ketergantungan yang memungkinkan Anda mengirim permintaan HTTP. Request for PHP menyediakan metode yang dibutuhkan untuk menambahkan header, mengakses data tanggapan, menangani formulir, dan hal lain yang mungkin Anda butuhkan, dikemas rapih dengan API yang mudah digunakan.

$headers = array('Accept' => 'application/json');
$options = array('auth' => array('user', 'pass'));
$request = Requests::get('https://api.github.com/gists', $headers, $options);

var_dump($request->status_code);
// int(200)

var_dump($request->headers['content-type']);
// string(31) "application/json; charset=utf-8"

var_dump($request->body);
// string(26891) "[...]"
Rinvex Country

Rinvex Country adalah paket PHP yang memungkinkan developer mengambil informasi rinci tentang negara-negara didunia. Dengan menggunakan lebih dari 50 metode, Anda bisa mendapatkan wilayah Angola, mata uang Cyprus, nama asli Namibia atau bahkan nama FIFA Finlandia. Ada satu ton info yang tersedia dan sumber data cukup andal.

$egypt = country('eg');

$egypt->getCapital();   // Cairo
$egypt->getDemonym();   // Egyptian
$egypt->getTld();       // .eg
$egypt->getContinent(); // Africa
$egypt->getSubregion(); // Northern Africa
$egypt->getBorders();   // ["ISR","LBY","SDN"]
Botman

Sebuah library PHP untuk mengembangkan bot messenger. Bekerja dengan sebagian besar platform pesan populer termasuk Facebook Messenger, Slack, Telegrm, WeChat dan lain-lain. Ada juga proyek boilerplate Laravel yang bermanfaat tersedia disini.

// create an instance
$botman = BotManFactory::create($config);

// give the bot something to listen for.
$botman->hears('hello', function (BotMan $bot) {
    $bot->reply('Hello yourself.');
});

// start listening
$botman->listen();
Charts

Paket Laravel untuk menghasilkan grafik yang dapat disesuaikan dari dataset. Paket ini berfungsi sebagai pembungkus PHP untuk beberapa pustaka bagan bawaan, memungkinkan developer untuk membuat berbagai macam grafik, alat pengukur dan progressbar yang hanya menggunakan satu alat.

$chart = Charts::create('line', 'highcharts')
 ->title('My nice chart')
 ->labels(['First', 'Second', 'Third'])
 ->values([5,10,20])
 ->dimensions(0,500);
Swap

Swap memungkinkan Anda untuk mengambil nilai tukar mata uang dari sejumlah layanan seperti Fixer, Google dan Yahoo. Permintaan tanggapan bisa dengan mudah di cache dan diakses nanti. Library tersedia dalam bentuk Paket Library juga.

// Build Swap with Fixer.io
$swap = (new Builder())
    ->add('fixer')
    ->build();
    
// Get the latest EUR/USD rate
$rate = $swap->latest('EUR/USD');

// 1.129
$rate->getValue();

// Get the EUR/USD rate 15 days ago
$rate = $swap->historical('EUR/USD', (new \DateTime())->modify('-15 days'));
Math PHP

Kumpulan fungsi matematika dan algoritma mulai dari aljabar sederhana hingga keuangan, statistik, analisis numerik dan bidang lainnya. Library bersifat modular, memiliki API langsung dan tidak memerlukan ketergantungan eksternal.

// Factors of an integer
$factors = Algebra::factors($n);

// Fibonacci sequence
$fib = Advanced::fibonacci($n);

// Combinations
$nCk  = Combinatorics::combinations($n, $k);

// Likelihood ratios
$LL = Experiment::likelihoodRatio($a, $b, $c, $d);
PHPUnit

PHPUnit adalah framework pengujian lanjutan yang memungkinkan tim untuk menguji kode mereka secara menyeluruh. Unit tes ditulis dalam kelas berorientasi objek mandiri dengan bantuan banyak metode untuk menangani asersi, dependensi dan lain-lain. CLI sederhana disediakan untuk menjalankan pengujian dan menghasilkan laporan.

class StackTest extends TestCase
{
    public function testPushAndPop()
    {
        $stack = [];
        $this->assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertEquals(1, count($stack));

        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }
}
Atoum

Framework pengujian yang kurang populer, kami juga ingin berbagi. Atoum menawarkan satu langkah instalasi prosess dan alur kerja yang relatif sederhana. Atoum memiliki mesin tiruan, pernyataan ekspresif, dan CLI yang dapat melakukan beberapa tes secara paralel.

$this->given($testedInstance = new testedClass())
    ->and($testedClass[] = $firstValue = uniqid())
    ->then
        ->sizeof($testedInstance)->isEqualTo(1)
        ->string($testedClass[0])->isEqualTo($firstValue);
Simple Regex Language

Implementasi PHP Simple Regex Language cara penulisan kata-kata biasa secara verbose. Library menyediakan beberapa metode yang dapat dirantai bersama, membentuk aturan RegEx yang mudah dibaca dan mudah dimengerti. Library memiliki port untuk JavaScript dan Python juga.

$query = SRL::startsWith()
    ->anyOf(function (Builder $query) {
        $query->digit()
            ->letter()
            ->oneOf('._%+-');
    })->onceOrMore()
    ->literally('@')
    ->anyOf(function (Builder $query) {
        $query->digit()
            ->letter()
            ->oneOf('.-');
    })->onceOrMore()
    ->literally('.')
    ->letter()->atLeast(2)
    ->mustEnd()->caseInsensitive();
Stash

Stash memudahkan untuk mempercepat kode Anda dengan cara menyimpan hasil dari fungsi atau kode yang mahal. Tindakan tertentu seperti query database atau panggilan ke API eksternal, memerlukan banyak waktu untuk berjalan namun cenderung memiliki hasil yang sama dalam jangka waktu yang singkat. Stash membuat lebih efisien untuk menyimpan hasilnya dan memanggilnya kembali nanti.

$pool = $this->cachePool;

// Get a Stash object from the cache pool.
$item = $pool->getItem("/user/{$userId}/info");

// Get the data from it, if any happens to be there.
$userInfo = $item->get();

// Check to see if the cache missed, which could mean that it either
// didn't exist or was stale.
if($item->isMiss())
{
    // Run the relatively expensive code.
    $userInfo = loadUserInfoFromDatabase($userId);

    // Set the new value in $item.
    $item->set($userInfo);

    // Store the expensive code so the next time it doesn't miss.
    $pool->save($item)
}
PHP VCR

Port library Ruby yang populer untuk menguji interaksi HTTP. PHP VCR mencatat permintaan HTTP dan menyimpannya dalam kaset yang dapat diputar ulang nantinya. Satu set utilitas pengujian juga disediakan, sehingga memungkinkan untuk memeriksa dan membandingkan rekaman secara rinci.

// After turning on, the VCR will intercept all requests
\VCR\VCR::turnOn();

// Record requests and responses in cassette file 'example'
\VCR\VCR::insertCassette('example');

// Following request will be recorded once and replayed in future test runs
$result = file_get_contents('http://example.com');
$this->assertNotEmpty($result);

// To stop recording requests, eject the cassette
\VCR\VCR::eject();

// Turn off VCR to stop intercepting requests
\VCR\VCR::turnOff();
OAuth 2.0 Server

Library ini memungkinkan Anda mengkonfigurasi OAuth 2.0 Server dengan mudah dan mengatur semua tingkat otentikasi yang diperlukan untuk melindungi API Anda. OAuth 2.0 Server  sepenuhnya sesuai standar dan mendukung semua hibah yang ditentukan oleh protokol Oauth. Modul Passport Laravel dibangun diatas Server 2.0 Oauth.

// Setup the authorization server
$server = new \League\OAuth2\Server\AuthorizationServer(
    $clientRepository,
    $accessTokenRepository,
    $scopeRepository,
    $privateKey,
    $publicKey
);

// Enable a grant on the server
$server->enableGrantType(
    new \League\OAuth2\Server\Grant\ClientCredentialsGrant(),
    new \DateInterval('PT1H') // access tokens will expire after 1 hour
);
Imagine

Library untuk memanipulasi gambar yang mencoba menggabungkan semua library pengolahan PHP tingkat rendah dibawah API berorientasi objek yang sama. Imagine memungkinkan Imagine digunakan untuk berbagai macam tugas seperti menggambar (drawing), mengubah ukuran (resizing) , memotong (cropping), menyaring (filter), memberi efek (effect), mengedit metadata (metadata editing) dan lainnya.

$palette = new Imagine\Image\Palette\RGB();

$image = $imagine->create(new Box(400, 300), $palette->color('#000'));

$image->draw()
    ->ellipse(new Point(200, 150), new Box(300, 225), $image->palette()->color('fff'));

$image->save('/path/to/ellipse.png');
MINI

Sangat sederhana dan mudah untuk memahami kerangka aplikasi PHP, hanya meyediakan fitur yang paling penting setiap kebutuhan proyek. MINI tidak berusahan menjadi framework do-it-all seperti Laravel, namun karena kesederhanaannya MINI dapat digunakan untuk membuat aplikasi yang lebih kecil berjalan dalam waktu singkat.

// Working with the model
$songs = $this->model->getAllSongs();
$amount_of_songs = $this->model->getAmountOfSongs();

// Loading views
require APP . 'views/_templates/header.php';
require APP . 'views/songs/index.php';
require APP . 'views/_templates/footer.php';
AWS SDK

Library PHP resmi untuk bekerja dengan Amazon Web Service. SDK memudahkan untuk menghubungkan AWS dengan proyek PHP dan mengakses semua berbagai layanan yang tersedia. Ada juga pembungkus Laravel yang berguna bisa ditemukan disini.

// Instantiate an Amazon S3 client.
$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-west-2'
]);

$s3->putObject([
    'Bucket' => 'my-bucket',
    'Key'    => 'my-object',
    'Body'   => fopen('/path/to/file', 'r'),
    'ACL'    => 'public-read',
]);
Purl

Library PHP yang ringan untuk dapat berjalan dengan URL. Dengan Purl Anda dapat membuat atribut jalur yang kompleks menurut atribut, mengekstrak data dari URL, memanipulasi query, mengenali URL dalam string dan banyak lagi.

$url = \Purl\Url::parse('http://jwage.com')
    ->set('scheme', 'https')
    ->set('port', '443')
    ->set('user', 'jwage')
    ->set('pass', 'password')
    ->set('path', 'about/me')
    ->set('query', 'param1=value1&param2=value2');

echo $url->getUrl(); // https://jwage:password@jwage.com:443/about/me?param1=value1&param2=value2
echo $url->publicSuffix; // com
echo $url->registerableDomain; // jwage.com
Daux.io

Generator dokumentasi yang menggunakan struktur folder sederhana dan penurunan ukuran file untuk membuat situs web dokumentasi yang responsif. Daux.io memiliki penyorotan sintaks otomatis, 4 opsi bertema, HTML Bootstrap untuk memudahkan penyesuaian, navigasi dengan URL yang mudah dibaca dan barang lainnya.

// Example configuration
{
    "title": "DAUX.IO",
    "tagline": "The Easiest Way To Document Your Project",
    "author": "Justin Walsh",
    "image": "app.png",
    "html": {
        "theme": "daux-blue",
        "breadcrumbs": true,
        "repo": "justinwalsh/daux.io",
        "edit_on_github": "justinwalsh/daux.io/blob/master/docs",
        "twitter": ["justin_walsh", "todaymade"],
        "google_analytics": "UA-12653604-10",
        "links": {
            "Download": "https://github.com/justinwalsh/daux.io/archive/master.zip",
            "GitHub Repo": "https://github.com/justinwalsh/daux.io",
            "Made by Todaymade": "http://todaymade.com"
        }
    }
}
Dompdf

Dompdf merupakan generator PDF yang mengambil markup HTML biasa dan mengubahnya menjadi file .pdf. Dompf memahami sebagian besar aturan CSS secara in-line atau melalui stylesheet eksternal.

// reference the Dompdf namespace
use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
Instaphp

Library untuk mengakses Instagram API. Instaphp memberikan kemudahan untuk developer dalam mengautentikasi aplikasi mereka dan mendapatkan akses ke berbagai titik akhir data Instagram termasuk image, user, like, komentar dan tag.

$api = new Instaphp\Instaphp([
    'client_id' => 'your client id',
    'client_secret' => 'your client secret',
    'redirect_uri' => 'http://somehost.foo/callback.php',
    'scope' => 'comments+likes'
]);

$popular = $api->Media->Popular(['count' => 10]);

if (empty($popular->error)) {
    foreach ($popular->data as $item) {
        printf('<img src="%s">', $item['images']['low_resolution']['url']);
    }
}
Latitude

Library untuk membangun query SQL menggunakan metode chainable. Latitude mendukung sebagian besar jenis query dan bekerja dengan baik pada MySQL, Postgres, SQL Server dan database lainnya. Latitude juga membantu melindungi dari SQL injeksi.

$select = SelectQuery::make(
        'id',
        'username'
    )
    ->from('users');

echo $select->sql();
// SELECT id, username FROM users

Comments

comments