A RFC6902 compliant JSON Patch PHP implementation
#License JSONPatch is licensed under the MIT license.
#Installation
composer require gamringer/php-json-patch
##Tests
composer install
phpunit
#Documentation
##Operations can be constructed and applied independently
<?php
$target = ['1', '2', '3'];
$operation = new \gamringer\JSONPatch\Operation\Test('/foo', 'bar');
$operation->apply($target);
##Operations can also be constructed from a JSON string
<?php
$operation = \gamringer\JSONPatch\Operation\Test::fromDecodedJSON(json_decode('{"path":"/foo","value":"bar"}'));
##A patch can be constructed from a set of operations
<?php
$patch = new \gamringer\JSONPatch\Patch();
$patch->addOperation(new \gamringer\JSONPatch\Operation\Add('/foo', 'bar'));
$patch->addOperation(new \gamringer\JSONPatch\Operation\Test('/foo', 'bar'));
##A patch can also be constructed from a JSON string
<?php
$patch = \gamringer\JSONPatch\Patch::fromJSON('[{"op":"add","path":"/foo","value":"bar"},{"op":"test","path":"/foo","value":"bar"}]');
##A patch can be applied
<?php
$patch = \gamringer\JSONPatch\Patch::fromJSON('[{"op":"add","path":"/foo","value":"bar"},{"op":"test","path":"/foo","value":"bar"}]');
$target = [];
$patch->apply($target);
var_dump($target);
/* Results:
array(1) {
'foo' =>
string(3) "bar"
}
*/
If the patch fails, it gets completely reverted and an exception is thrown.
<?php
$patch = \gamringer\JSONPatch\Patch::fromJSON('[{"op":"add","path":"/foo","value":"bar"},{"op":"test","path":"/foo","value":"baz"}]');
$target = [];
try {
$patch->apply($target);
} catch (\gamringer\JSONPatch\Exception $e) {
var_dump($target);
}
/* Results:
array(0) {}
*/