PDO Proxy adalah wrapper PDO sederhana yang memungkinkan untuk mencegat dan mengubah eksekusi semua metode PDO.
Fitur seperti itu dapat digunakan untuk:
Kelas PDOProxyPDO dan PDOProxyPDOStatement memperluas kelas PDO dan PDOStatement asli, oleh karena itu mereka kompatibel dengan metode apa pun yang mengharapkan objek PDO biasa.
Setelah menginstal perpustakaan ini, Anda harus memberikan konfigurasi proxy, seperti itu:
<?php
use PDOProxy EventManager ;
use PDOProxy ProxyConfiguration ;
use PDOProxy PDOCommand ;
$ ev = new EventManager ();
// you can alter the output of any method, like "__construct", "query", "prepare"...
// in order to do so, you must pass method name as an event name
// please note: multiple event listeners may be attached to a single event type
$ ev -> addEventListener ( " query " , function ( PDOCommand $ command , string $ eventName ) {
// you can alter the result of any PDO method
$ event -> setResult ( new PDOMockStatement ( " query " , " SELECT 1 " );
$ command -> stopPropagation ();
});
// you can intercept any method, like "__construct", "query", "prepare"...
// to do so, you must add "#pre" suffix to the event name
$ ev -> addEventListener ( " query#pre " , function ( PDOCommand $ command , string $ eventName ) {
// if you stop event propagation, the real PDO method won't be executed and the result will be taken from this callback
if ( $ command -> getArgs ()[ 0 ] == " SELECT 1 " ) {
$ command -> stopPropagation ();
}
});
ProxyConfiguration:: init ( $ ev );Sekarang, Anda dapat menginisialisasi pdoproxy seperti objek PDO biasa:
<?php
use PDOProxy PDO ;
$ pdo = new PDO ( " dsn " , " user " , " password " , [ " option1 " => 1 , " option2 " => 2 ]);
$ result = $ pdo -> query ( " SELECT 2 " );
// [...]Proxy dapat diinstal dengan dua cara berbeda:
user@host:/directory$ composer require pdo-proxy/pdo-proxy
Kode sumber dapat ditemukan dalam file zip di bawah url berikut: https://github.com/artur-graniszewski/pdo-proxy/archive/master.zip
Seperti yang ditunjukkan dalam kode di atas, setiap penangan acara mendapatkan akses ke dua parameter, objek Event tertentu dan nama acara (sebagai string).
Berikut ini adalah gambaran dua jenis acara yang diangkat oleh PDO Proxy:
Ini dinaikkan pada setiap eksekusi metode kelas PDOProxyPDO
<?php
namespace PDOProxy ;
interface PDOCommandInterface
{
public function getArgs () : array ;
public function setArgs ( array $ args );
public function getMethodName () : string ;
public function getResult ();
public function setResult ( $ result );
} Metode getArgs() dan setArgs() memungkinkan untuk mengambil dan mengubah parameter input yang diteruskan ke metode PDOProxyPDO , sementara getMethodName() memungkinkan untuk memeriksa metode PDO mana yang dijalankan.
Metode acara getResult() dan setResult() memungkinkan untuk mengakses dan mengubah hasil yang akan dikembalikan dengan metode PDO tertentu.
Dibesarkan pada setiap eksekusi metode kelas PDOProxyPDOStatement
<?php
namespace PDOProxy ;
interface PDOStatementCommandInterface extends PDOCommandInterface
{
public function getParentArgs () : array ;
public function setParentArgs ( array $ args );
public function getParentMethodName () : string ;
} Metode getParentArgs() dan setParentArgs() memungkinkan untuk mengambil dan mengubah parameter input yang diteruskan ke metode PDOProxyPDO yang menciptakan objek PDOProxyPDOStatement yang diberikan, sementara getParentMethodName() memungkinkan untuk memeriksa metode PDO mana yang dieksekusi di tempat pertama.
Semua acara PDO memperluas antarmuka acara generik berikut:
<?php
namespace PDOProxy ;
interface EventInterface
{
public function stopPropagation ();
public function isPropagationStopped () : bool ;
} Metode stopPropagation() menghentikan perambatan acara lebih lanjut (menghasilkan pendengar acara lain yang tidak dieksekusi untuk jenis acara yang diberikan). Dalam hal nama acara yang sufiks dengan kalimat "#pre" (seperti "kueri#pre"), metode PDO/PDostatement asli tidak akan dieksekusi pada database, dalam hasil kasus seperti itu harus diejek dengan mengeksekusi metode setResult() .
Proxy harus dikonfigurasi dengan memberikan contoh metode PDOProxyEventManager ke static init() dari kelas PDOProxyProxyConfiguration (lihat contoh di atas).
Harap diingat bahwa Instantiating PDOProxyPDO Class sebelum konfigurasi proxy menghasilkan LogicException