PHP code example of doctrine / doctrine-zend-hydrator
1. Go to this page and download the library: Download doctrine/doctrine-zend-hydrator 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/ */
doctrine / doctrine-zend-hydrator example snippets
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($objectManager);
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class City
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=48)
*/
protected $name;
public function getId()
{
return $this->id;
}
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
}
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($entityManager);
$city = new City();
$data = [
'name' => 'Paris',
];
$city = $hydrator->hydrate($data, $city);
echo $city->getName(); // prints "Paris"
$dataArray = $hydrator->extract($city);
echo $dataArray['name']; // prints "Paris"
namespace Application\Entity;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Appointment
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="datetime")
*/
protected $time;
public function getId()
{
return $this->id;
}
public function setTime(DateTime $time)
{
$this->time = $time;
}
public function getTime()
{
return $this->time;
}
}
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($entityManager);
$appointment = new Appointment();
$data = [
'time' => '1357057334',
];
$appointment = $hydrator->hydrate($data, $appointment);
echo get_class($appointment->getTime()); // prints "DateTime"
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=48)
*/
protected $username;
/**
* @ORM\Column(type="string")
*/
protected $password;
public function getId()
{
return $this->id;
}
public function setUsername($username)
{
$this->username = $username;
}
public function getUsername()
{
return $this->username;
}
public function setPassword($password)
{
$this->password = $password;
}
public function getPassword()
{
return $this->password;
}
}
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class BlogPost
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\User")
*/
protected $user;
/**
* @ORM\Column(type="string")
*/
protected $title;
public function getId()
{
return $this->id;
}
public function setUser(User $user)
{
$this->user = $user;
}
public function getUser()
{
return $this->user;
}
public function setTitle($title)
{
$this->title = $title;
}
public function getTitle()
{
return $this->title;
}
}
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($entityManager);
$blogPost = new BlogPost();
$data = [
'title' => 'The best blog post in the world!',
'user' => [
'id' => 2, // Written by user 2
],
];
$blogPost = $hydrator->hydrate($data, $blogPost);
echo $blogPost->getTitle(); // prints "The best blog post in the world!"
echo $blogPost->getUser()->getId(); // prints 2
$data = [
'title' => 'The best blog post in the world!',
'user' => [
'id' => 2, // Written by user 2
],
];
$data = [
'title' => 'The best blog post in the world!',
'user' => 2,
];
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($entityManager);
$blogPost = new BlogPost();
$user = new User();
$user->setUsername('bakura');
$user->setPassword('p@$$w0rd');
$data = [
'title' => 'The best blog post in the world!',
'user' => $user,
];
$blogPost = $hydrator->hydrate($data, $blogPost);
echo $blogPost->getTitle(); // prints "The best blog post in the world!"
echo $blogPost->getUser()->getId(); // prints 2
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class BlogPost
{
/** .. */
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\User", cascade={"persist"})
*/
protected $user;
/** … */
}
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($entityManager, 'Application\Entity\BlogPost');
$blogPost = new BlogPost();
$data = [
'title' => 'Art thou mad?',
'user' => [
'id' => '',
'username' => 'willshakes',
'password' => '2BorN0t2B',
],
];
$blogPost = $hydrator->hydrate($data, $blogPost);
echo $blogPost->getUser()->getUsername(); // prints willshakes
echo $blogPost->getUser()->getPassword(); // prints 2BorN0t2B
namespace Application\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class BlogPost
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="Application\Entity\Tag", mappedBy="blogPost")
*/
protected $tags;
/**
* Never forget to initialize your collections!
*/
public function __construct()
{
$this->tags = new ArrayCollection();
}
public function getId()
{
return $this->id;
}
public function addTags(Collection $tags)
{
foreach ($tags as $tag) {
$tag->setBlogPost($this);
$this->tags->add($tag);
}
}
public function removeTags(Collection $tags)
{
foreach ($tags as $tag) {
$tag->setBlogPost(null);
$this->tags->removeElement($tag);
}
}
public function getTags()
{
return $this->tags;
}
}
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Tag
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\BlogPost", inversedBy="tags")
*/
protected $blogPost;
/**
* @ORM\Column(type="string")
*/
protected $name;
public function getId()
{
return $this->id;
}
/**
* Allow null to remove association
*/
public function setBlogPost(BlogPost $blogPost = null)
{
$this->blogPost = $blogPost;
}
public function getBlogPost()
{
return $this->blogPost;
}
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
}
public function setTags(Collection $tags)
{
$this->tags = $tags;
}
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($entityManager);
$blogPost = new BlogPost();
$data = [
'title' => 'The best blog post in the world!',
'tags' => [
['id' => 3], // add tag whose id is 3
['id' => 8], // also add tag whose id is 8
],
];
$blogPost = $hydrator->hydrate($data, $blogPost);
echo $blogPost->getTitle(); // prints "The best blog post in the world!"
echo count($blogPost->getTags()); // prints 2
$data = [
'title' => 'The best blog post in the world!',
'tags' => [
['id' => 3], // add tag whose id is 3
['id' => 8], // also add tag whose id is 8
],
];
$data = [
'title' => 'The best blog post in the world!',
'tags' => [3, 8],
];
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($entityManager);
$blogPost = new BlogPost();
$tags = [];
$tag1 = new Tag();
$tag1->setName('PHP');
$tags[] = $tag1;
$tag2 = new Tag();
$tag2->setName('STL');
$tags[] = $tag2;
$data = [
'title' => 'The best blog post in the world!',
'tags' => $tags, // Note that you can mix integers and entities without any problem
];
$blogPost = $hydrator->hydrate($data, $blogPost);
echo $blogPost->getTitle(); // prints "The best blog post in the world!"
echo count($blogPost->getTags()); // prints 2
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class BlogPost
{
/** .. */
/**
* @ORM\OneToMany(targetEntity="Application\Entity\Tag", mappedBy="blogPost", cascade={"persist"})
*/
protected $tags;
/** … */
}
$data = [
'city' => null,
];
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
use Doctrine\Zend\Hydrator\Strategy;
$hydrator = new DoctrineHydrator($entityManager);
$hydrator->addStrategy('tags', new Strategy\DisallowRemoveByValue());
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($objectManager, false);
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class SimpleEntity
{
/**
* @ORM\Column(type="string")
*/
protected $foo;
public function getFoo()
{
die();
}
/** ... */
}
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($objectManager);
$object = new SimpleEntity();
$object->setFoo('bar');
$data = $hydrator->extract($object);
echo $data['foo']; // never executed, because the script was killed when getter was accessed
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
$hydrator = new DoctrineHydrator($objectManager, false);
$object = new SimpleEntity();
$object->setFoo('bar');
$data = $hydrator->extract($object);
echo $data['foo']; // prints 'bar'
namespace Application\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class BlogPost
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="Application\Entity\Tag", mappedBy="blogPost", cascade={"persist"})
*/
protected $tags;
/**
* Never forget to initialize your collections!
*/
public function __construct()
{
$this->tags = new ArrayCollection();
}
/**
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @param Collection $tags
*/
public function addTags(Collection $tags)
{
foreach ($tags as $tag) {
$tag->setBlogPost($this);
$this->tags->add($tag);
}
}
/**
* @param Collection $tags
*/
public function removeTags(Collection $tags)
{
foreach ($tags as $tag) {
$tag->setBlogPost(null);
$this->tags->removeElement($tag);
}
}
/**
* @return Collection
*/
public function getTags()
{
return $this->tags;
}
}
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Tag
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\BlogPost", inversedBy="tags")
*/
protected $blogPost;
/**
* @ORM\Column(type="string")
*/
protected $name;
/**
* Get the id
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Allow null to remove association
*
* @param BlogPost $blogPost
*/
public function setBlogPost(BlogPost $blogPost = null)
{
$this->blogPost = $blogPost;
}
/**
* @return BlogPost
*/
public function getBlogPost()
{
return $this->blogPost;
}
/**
* @param string $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return string
*/
public function getName()
{
return $this->name;
}
}
namespace Application\Form;
use Application\Entity\Tag;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
class TagFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('tag');
$this->setHydrator(new DoctrineHydrator($objectManager))
->setObject(new Tag());
$this->add([
'type' => 'Zend\Form\Element\Hidden',
'name' => 'id',
]);
$this->add([
'type' => 'Zend\Form\Element\Text',
'name' => 'name',
'options' => [
'label' => 'Tag',
],
]);
}
public function getInputFilterSpecification()
{
return [
'id' => [
'
namespace Application\Form;
use Application\Entity\BlogPost;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
class BlogPostFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('blog-post');
$this->setHydrator(new DoctrineHydrator($objectManager))
->setObject(new BlogPost());
$this->add([
'type' => 'Zend\Form\Element\Text',
'name' => 'title',
]);
$tagFieldset = new TagFieldset($objectManager);
$this->add([
'type' => 'Zend\Form\Element\Collection',
'name' => 'tags',
'options' => [
'count' => 2,
'target_element' => $tagFieldset,
],
]);
}
public function getInputFilterSpecification()
{
return [
'title' => [
'
namespace Application\Form;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Form;
class CreateBlogPostForm extends Form
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('create-blog-post-form');
// The form will hydrate an object of type "BlogPost"
$this->setHydrator(new DoctrineHydrator($objectManager));
// Add the BlogPost fieldset, and set it as the base fieldset
$blogPostFieldset = new BlogPostFieldset($objectManager);
$blogPostFieldset->setUseAsBaseFieldset(true);
$this->add($blogPostFieldset);
// … add CSRF and submit elements …
// Optionally set your validation group here
}
}
namespace Application\Form;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Form;
class UpdateBlogPostForm extends Form
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('update-blog-post-form');
// The form will hydrate an object of type "BlogPost"
$this->setHydrator(new DoctrineHydrator($objectManager));
// Add the BlogPost fieldset, and set it as the base fieldset
$blogPostFieldset = new BlogPostFieldset($objectManager);
$blogPostFieldset->setUseAsBaseFieldset(true);
$this->add($blogPostFieldset);
// … add CSRF and submit elements …
// Optionally set your validation group here
}
}
public function createAction()
{
// Get your ObjectManager from the ServiceManager
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
// Create the form and inject the ObjectManager
$form = new CreateBlogPostForm($objectManager);
// Create a new, empty entity and bind it to the form
$blogPost = new BlogPost();
$form->bind($blogPost);
if ($this->request->isPost()) {
$form->setData($this->request->getPost());
if ($form->isValid()) {
$objectManager->persist($blogPost);
$objectManager->flush();
}
}
return ['form' => $form];
}
public function editAction()
{
// Get your ObjectManager from the ServiceManager
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
// Create the form and inject the ObjectManager
$form = new UpdateBlogPostForm($objectManager);
// Fetch the existing BlogPost from storage and bind it to the form.
// This will pre-fill form field values
$blogPost = $this->userService->get($this->params('blogPost_id'));
$form->bind($blogPost);
if ($this->request->isPost()) {
$form->setData($this->request->getPost());
if ($form->isValid()) {
// Save the changes
$objectManager->flush();
}
}
return ['form' => $form];
}
namespace Application\Entity;
/**
* @ORM\Entity
* @ORM\Table(name="Students")
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=48)
*/
protected $name;
/**
* @ORM\OneToOne(targetEntity="City")
*/
protected $city;
// … getter and setters are defined …
}
namespace Application\Form;
use Application\Entity\User;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
class UserFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('user');
$this->setHydrator(new DoctrineHydrator($objectManager))
->setObject(new User());
$this->add([
'type' => 'Zend\Form\Element\Text',
'name' => 'name',
'options' => [
'label' => 'Your name',
],
'attributes' => [
'
namespace Application\Form;
use Application\Entity\City;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
class CityFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('city');
$this->setHydrator(new DoctrineHydrator($objectManager))
->setObject(new City());
$this->add([
'type' => 'Zend\Form\Element\Text',
'name' => 'name',
'options' => [
'label' => 'Name of your city',
],
'attributes' => [
'
namespace Application\Form;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Form;
class EditNameForm extends Form
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('edit-name-form');
$this->setHydrator(new DoctrineHydrator($objectManager));
// Add the user fieldset, and set it as the base fieldset
$userFieldset = new UserFieldset($objectManager);
$userFieldset->setName('user');
$userFieldset->setUseAsBaseFieldset(true);
$this->add($userFieldset);
// … add CSRF and submit elements …
// Set the validation group so that we don't care about city
$this->setValidationGroup([
'csrf', // assume we added a CSRF element
'user' => [
'name',
],
]);
}
}
public function editNameAction()
{
// Get your ObjectManager from the ServiceManager
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
// Create the form and inject the ObjectManager
$form = new EditNameForm($objectManager);
// Get the logged user (for more informations about userIdentity(), please read the Authentication doc)
$loggedUser = $this->userIdentity();
// We bind the logged user to the form, so that the name is pre-filled with previous data
$form->bind($loggedUser);
$request = $this->request;
if ($request->isPost()) {
// Set data from post
$form->setData($request->getPost());
if ($form->isValid()) {
// You can now safely save $loggedUser
}
}
}
namespace Application\Form;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Zend\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Form;
class EditNameForm extends Form
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('edit-name-form');
$this->setHydrator(new DoctrineHydrator($objectManager));
// Add the user fieldset, and set it as the base fieldset
$userFieldset = new UserFieldset($objectManager);
$userFieldset->setName('user');
$userFieldset->setUseAsBaseFieldset(true);
// We don't want City relationship, so remove it!!
$userFieldset->remove('city');
$this->add($userFieldset);
// … add CSRF and submit elements …
// We don't even need the validation group as the City fieldset does not
// exist anymore
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.