1. Go to this page and download the library: Download eniams/spy library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
eniams / spy example snippets
namespace App\Entity\Foo;
class Foo implements \Eniams\Spy\Cloner\DeepCopyClonerInterface
// or SpyClonerLoadPropertyObjectInterface
// or SpyClonerInterface
{}
namespace App\Service;
// Create the Cloner
class UserLandCloner implements \Eniams\Spy\Cloner\ClonerInterface
{
public function doClone($object)
{
// Stuff to clone the given $object.
}
public function supports($object): bool
{
return $object instanceof UserLandClonerInterface;
}
}
// Create the Interface
interface UserLandClonerInterface extends \Eniams\Spy\SpyInterface
// Use your Cloner (Implement the created interface in the class)
class Foo implements \Eniams\Spy\Cloner\UserLandClonerInterface
$chainCloner = new \Eniams\Spy\Cloner\ChainCloner([new UserLandCloner()]);
// $chainCloner is optional and need to be use only if you want to use a custom cloners,
// for Symfony remember that your custom cloner is already registered in the `ChainCloner $chainCloner` and it is a public service that can be retrieve from the container.
$spied = new \Eniams\Spy\Spy($foo, $chainCloner);
$spied->isModified();
$spied->isNotModified();
class FooController extends AbstractController
{
/**
* @Route("/foo", name="foo")
*/
public function index(SpyBase $spyBase)
{
$user = (new \Foo\Entity\User())->setName('Smaone');
$spyBase = (new \Eniams\Spy\SpyBase());
$spyBase->add('your_key', $user);
$user = (new \Foo\Entity\User())->setName('Smaone');
$spyBase = (new \Eniams\Spy\SpyBase());
$spyBase->add('your_key', $user); // behind the scene $object is converted to a \Eniams\Spy\Spy object and the cloner class will be resolve by the interface implemented by the $object.
$yourContainer
->register('spy_base_service', $spyBase);
$spyBase = $yourContainer->get('spy_base_service');
// fetch the object
$spyBase->get('your_key');
// remove
$spyBase->remove('your_key');
class User implements SpyClonerInterface, PropertyCheckerContextInterface {
private $age;
private $adresse;
private $firstname;
public static function propertiesInContext(): array
{
return [
'context_check_firstname' => ['firstname', 'age'],
'context_check_adresse' => ['adresse'],
];
}
}
// index.php
$spied->isModifiedInContext(['context_check_firstname']); // true only if 'firstname', 'age' were modified
$spied->isModifiedInContext(['context_check_adresse']); // true only if 'adresse' is modified
$spied->getPropertiesModifiedInContext(['context_check_adresse']); // return modified properties for context context_check_adresse
class User implements SpyClonerInterface{
private $age;
private $adresse;
private $firstname;
}
// index.php
$spied->isModifiedForProperties(['age']); // true only if age was modified
class User implements SpyClonerInterface, PropertyCheckerBlackListInterface {
private $age;
private $adresse;
private $firstname;
public static function propertiesBlackList(): array
{
return ['age'];
}
}
// index.php
$user->setAge(33);
$spied->isModified(); // return false because $age is blacklisted
$spied->getPropertiesModifiedWithoutBlackListContext(); // return age even it's blacklisted
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.