PHP code example of hostnet / entity-mutation-component
1. Go to this page and download the library: Download hostnet/entity-mutation-component 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/ */
hostnet / entity-mutation-component example snippets
use Hostnet\Component\EntityMutation\Resolver\MutationResolver;
use Hostnet\Component\EntityTracker\Listener\EntityChangedListener;
use Hostnet\Component\EntityTracker\Provider\EntityAnnotationMetadataProvider;
use Hostnet\Component\EntityTracker\Provider\EntityMutationMetadataProvider;
/* @var $em \Doctrine\ORM\EntityManager */
$event_manager = $em->getEventManager();
// default doctrine annotation reader
$annotation_reader = new AnnotationReader();
// setup and stored as mutation
// and which entity represents your Mutation entity.
$mutation_resolver = new MutationResolver($annotation_metadata_provider);
// creating the mutation listener
$mutation_listener = new MutationListener($mutation_resolver);
// register the events
$event_manager->addEventListener('prePersist', $entity_changed_listener);
$event_manager->addEventListener('preFlush', $entity_changed_listener);
$event_manager->addEventListener('entityChanged', $mutation_listener);
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\Mapping as ORM;
use Hostnet\Component\EntityMutation\Mutation;
use Hostnet\Component\EntityMutation\MutationAwareInterface;
/**
* @ORM\Entity
* @ORM\Table(name="users")
* @Mutation(
* class = "MyUserEntityMutation",
* strategy = "previous"
* )
* The above values are equal to the defaults. They are only
* here to show how you can use them outside of this example
*/
class MyUserEntity implements MutationAwareInterface
{
...
private $id;
/**
* @ORM\...
*/
private $city;
/**
* @ORM\...
*/
private $name;
/**
* @ORM\OneToMany...
* @var ArrayCollection
*/
private $mutations;
public function setName($name) { ... }
public function getName() { ... }
public function addMutation($element)
{
$this->mutations->add($element);
}
public function getMutations()
{
return $this->mutations;
}
/**
* Used to get the last mutation stored, you might want to change
* it to return the one before that if your strategy is current.
*/
public function getPreviousMutation()
{
$criteria = (new Criteria())
->orderBy(['id' => Criteria::DESC])
->setMaxResults(1);
return $this->mutations->matching($criteria)->current() ? : null;
}
}
use Doctrine\ORM\Mapping as ORM;
class MyUserEntityMutation
{
...
/**
* @ORM\ManyToOne(targetEntity="MyUserEntity", inversedBy="mutations")
*/
private $user;
/**
* @ORM\...
*/
private $name;
public function setName($name) { ... }
public function getName() { ... }
public function __construct(MyUserEntity $user, MyUserEntity $original_data)
{
// link our user to the mutation
$this->user = $user;
// populate the mutation with data from the previous state
$this->name = $original_data->getName();
}
}
$my_user_entity->setName('Henk'); // was Hans before
$em->flush();
var_dump($my_user_entity->getPreviousMutation()); // shows the state it had with Hans
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.