Last active
September 29, 2016 06:24
-
-
Save korotovsky/eeedb6e5d8f6bd9dca38 to your computer and use it in GitHub Desktop.
IdToObjectTrasformer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use Doctrine\Common\Persistence\ObjectManager; | |
use Doctrine\ORM\EntityRepository; | |
use Symfony\Component\Form\DataTransformerInterface; | |
use Symfony\Component\Form\Exception\TransformationFailedException; | |
/** | |
* Class IdToObjectTransformer | |
*/ | |
class IdToObjectTransformer implements DataTransformerInterface | |
{ | |
/** @var EntityRepository */ | |
protected $repository; | |
/** | |
* @param ObjectManager $om | |
* @param $class | |
*/ | |
public function __construct(ObjectManager $om, $class) | |
{ | |
$this->repository = $om->getRepository($class); | |
} | |
/** | |
* Transforms a value from the original representation to a transformed representation. | |
* | |
* This method is called on two occasions inside a form field: | |
* | |
* 1. When the form field is initialized with the data attached from the datasource (object or array). | |
* 2. When data from a request is submitted using {@link Form::submit()} to transform the new input data | |
* back into the renderable format. For example if you have a date field and submit '2009-10-10' | |
* you might accept this value because its easily parsed, but the transformer still writes back | |
* "2009/10/10" onto the form field (for further displaying or other purposes). | |
* | |
* This method must be able to deal with empty values. Usually this will | |
* be NULL, but depending on your implementation other empty values are | |
* possible as well (such as empty strings). The reasoning behind this is | |
* that value transformers must be chainable. If the transform() method | |
* of the first value transformer outputs NULL, the second value transformer | |
* must be able to process that value. | |
* | |
* By convention, transform() should return an empty string if NULL is | |
* passed. | |
* | |
* @param mixed $value The value in the original representation | |
* | |
* @return mixed The value in the transformed representation | |
* | |
* @throws TransformationFailedException When the transformation fails. | |
*/ | |
public function transform($value) | |
{ | |
if ($value === null || $value === '') { | |
return ''; | |
} | |
return $value->getId(); | |
} | |
/** | |
* Transforms a value from the transformed representation to its original | |
* representation. | |
* | |
* This method is called when {@link Form::submit()} is called to transform the requests tainted data | |
* into an acceptable format for your data processing/model layer. | |
* | |
* This method must be able to deal with empty values. Usually this will | |
* be an empty string, but depending on your implementation other empty | |
* values are possible as well (such as empty strings). The reasoning behind | |
* this is that value transformers must be chainable. If the | |
* reverseTransform() method of the first value transformer outputs an | |
* empty string, the second value transformer must be able to process that | |
* value. | |
* | |
* By convention, reverseTransform() should return NULL if an empty string | |
* is passed. | |
* | |
* @param mixed $value The value in the transformed representation | |
* | |
* @return mixed The value in the original representation | |
* | |
* @throws TransformationFailedException When the transformation fails. | |
*/ | |
public function reverseTransform($value) | |
{ | |
if ($value === null || $value === '') { | |
return null; | |
} | |
$object = $this->repository->find($value); | |
if ($object === null) { | |
throw new TransformationFailedException('Entity not found'); | |
} | |
return $object; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment