ocramius/proxy-manager
ProxyManager generates and manages PHP proxy classes (virtual proxies, lazy-loading value holders, etc.) to implement the Proxy Pattern. Useful for lazy-loading, interceptors, and advanced DI/ORM scenarios. Install via Composer and use factory helpers to create proxies.
The remote object implementation is a mechanism that enables a local object to control another object on another server. Each call method on the local object will do a network call to get information or execute operations on the remote object.
A remote object is based on an interface. The remote interface defines the API that a consumer can call. This interface must be implemented both by the client and the RPC server.
Laminas's RPC components (XmlRpc, JsonRpc & Soap) can be used with the remote object. You will need to require the one you need via composer:
$ php composer.phar require laminas/laminas-xmlrpc:2.*
$ php composer.phar require laminas/laminas-json:2.*
$ php composer.phar require laminas/laminas-soap:2.*
ProxyManager comes with 3 adapters:
ProxyManager\Factory\RemoteObject\Adapter\XmlRpcProxyManager\Factory\RemoteObject\Adapter\JsonRpcProxyManager\Factory\RemoteObject\Adapter\SoapRPC server side code (xmlrpc.php in your local webroot):
interface FooServiceInterface
{
public function foo();
}
class Foo implements FooServiceInterface
{
/**
* Foo function
* [@return](https://github.com/return) string
*/
public function foo()
{
return 'bar remote';
}
}
$server = new Laminas\XmlRpc\Server();
$server->setClass('Foo', 'FooServiceInterface'); // my FooServiceInterface implementation
$server->handle();
Client side code (proxy) :
interface FooServiceInterface
{
public function foo();
}
$factory = new \ProxyManager\Factory\RemoteObjectFactory(
new \ProxyManager\Factory\RemoteObject\Adapter\XmlRpc(
new \Laminas\XmlRpc\Client('https://localhost/xmlrpc.php')
)
);
$proxy = $factory->createProxy('FooServiceInterface');
var_dump($proxy->foo()); // "bar remote"
Your adapters must implement ProxyManager\Factory\RemoteObject\AdapterInterface:
interface AdapterInterface
{
/**
* Call remote object
*
* [@param](https://github.com/param) string $wrappedClass
* [@param](https://github.com/param) string $method
* [@param](https://github.com/param) array $params
*
* [@return](https://github.com/return) mixed
*/
public function call($wrappedClass, $method, array $params = []);
}
To create your implementation (for RESTful web services, for example), pass your adapter instance to your factory at construction time.
func_get_args(), func_get_arg() and func_num_arg() will not function properly for parameters that are
not part of the proxied object interface: use
variadic arguments instead.How can I help you explore Laravel packages today?