Advanced JSONRPC
Provides basic classes for requests and responses in JSONRPC and a Dispatcher
class that can decode a JSONRPC request
and call appropriate methods on a target, coercing types of parameters by type-hints and @param
tags.
Supports nested targets: If the method is something like myNestedTarget->theMethod
, the dispatcher will look for a
myNestedTarget
property on the target and call theMethod
on it. The delimiter is configurable and defaults to the
PHP object operator ->
.
Example
use AdvancedJsonRpc\Dispatcher;
class Argument
{
public $aProperty;
}
class Target
{
public function someMethod(Argument $arg)
{
// $arg instanceof Argument === true
// $arg->aProperty === 123
return 'Hello World';
}
}
$dispatcher = new Dispatcher(new Target());
$result = $dispatcher->dispatch('
{
"jsonrpc": "2.0",
"id": 1,
"method": "someMethod",
"params": {
"arg": {"aProperty": 123}
}
}
');
// $result === "Hello World"
Nested Targets
use AdvancedJsonRpc\Dispatcher;
class TextDocumentManager
{
public function didOpen(string $uri)
{
return 'Thank you for this information';
}
}
class LanguageServer
{
public $textDocument;
public function __construct()
{
$this->textDocument = new TextDocumentManager();
}
}
$dispatcher = new Dispatcher(new LanguageServer(), '/');
$result = $dispatcher->dispatch('
{
"jsonrpc": "2.0",
"id": 1,
"method": "textDocument/didOpen",
"params": {
"uri": "file:///c/Users/felix/test.php"
}
}
');
// $result === "Thank you for this information"