PDO-Proxy ist ein einfacher, ereignisorientierter PDO-Wrapper, mit dem alle PDO-Methoden ausgeführt und verändert werden können.
Eine solche Funktion kann verwendet werden, um:
Die PDOProxyPDO und PDOProxyPDOStatement -Klassen erweitern die nativen PDO und PDOStatement -Klassen, daher sind sie mit jeder Methode kompatibel, die regelmäßige PDO -Objekte erwartet.
Nach der Installation dieser Bibliothek müssen Sie die Proxy -Konfiguration wie SO bereitstellen:
<?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 );Jetzt können Sie Pdoproxy genauso initialisieren, genau wie das reguläre PDO -Objekt:
<?php
use PDOProxy PDO ;
$ pdo = new PDO ( " dsn " , " user " , " password " , [ " option1 " => 1 , " option2 " => 2 ]);
$ result = $ pdo -> query ( " SELECT 2 " );
// [...]Proxy kann auf zwei verschiedene Arten installiert werden:
user@host:/directory$ composer require pdo-proxy/pdo-proxy
Quellcodes finden Sie in der ZIP-Datei unter der folgenden URL: https://github.com/artur-graniszewski/pdo-proxy/archive/master.zip
Wie im obigen Code demonstriert, erhält jeder Ereignishandler Zugriff auf zwei Parameter, bestimmte Event und Ereignisname (als Zeichenfolge).
Hier finden Sie einen Überblick über zwei von PDO -Proxy aufgeworfene Ereignisstypen:
Es wird bei jeder Ausführung der PDOProxyPDO -Klassenmethode erhoben
<?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 );
} Die Methoden getArgs() und setArgs() ermöglichen das Abrufen und Ändern der an PDOProxyPDO -Methode übergebenen Eingabeparameter, während getMethodName() überprüft werden kann, welche PDO -Methode ausgeführt wurde.
Die Ereignismethoden getResult() und setResult() ermöglichen den Zugriff auf und verändern Sie das Ergebnis, das nach einer spezifischen PDO -Methode zurückgegeben wird.
Es wird bei jeder Ausführung der PDOProxyPDOStatement Class -Methode erhoben
<?php
namespace PDOProxy ;
interface PDOStatementCommandInterface extends PDOCommandInterface
{
public function getParentArgs () : array ;
public function setParentArgs ( array $ args );
public function getParentMethodName () : string ;
} Die Methoden getParentArgs() und setParentArgs() ermöglichen das Abrufen und Ändern von Eingangsparametern, die an PDOProxyPDO -Methoden übergeben wurden, die die angegebene PDOProxyPDOStatement -Objekt erstellt haben, während getParentMethodName() ermöglicht, welche PDO -Methode an erster Stelle ausgeführt wurde.
Alle PDO -Ereignisse erweitern die folgende generische Ereignisschnittstelle:
<?php
namespace PDOProxy ;
interface EventInterface
{
public function stopPropagation ();
public function isPropagationStopped () : bool ;
} Die stopPropagation() -Methode stoppt die weitere Ereignisausbreitung (was dazu führt, dass andere Ereignishörer für einen bestimmten Ereignisart nicht ausgeführt werden). Im Falle von Ereignisnamen setResult() die mit "#Pre" -Schat (z.
Der Proxy muss durch Bereitstellung einer Instanz von PDOProxyEventManager für die statische init() -Methode einer PDOProxyProxyConfiguration -Klasse konfiguriert werden (siehe Beispiel oben).
Bitte beachten Sie, dass die Instanziierung PDOProxyPDO -Klasse vor der Proxy -Konfiguration zu LogicException führt