Added data transformers
This commit is contained in:
parent
0837af1bda
commit
87474437d4
2 changed files with 128 additions and 0 deletions
74
Form/DataTransformer/ModelsToArrayTransformer.php
Normal file
74
Form/DataTransformer/ModelsToArrayTransformer.php
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
namespace Propel\PropelBundle\Form\DataTransformer;
|
||||
|
||||
use Symfony\Component\Form\DataTransformerInterface;
|
||||
use Propel\PropelBundle\Form\ChoiceList\ModelChoiceList;
|
||||
use \PropelCollection;
|
||||
|
||||
class ModelsToArrayTransformer implements DataTransformerInterface
|
||||
{
|
||||
private $choiceList;
|
||||
|
||||
public function __construct(ModelChoiceList $choiceList)
|
||||
{
|
||||
$this->choiceList = $choiceList;
|
||||
}
|
||||
|
||||
public function transform($collection)
|
||||
{
|
||||
if (null === $collection) {
|
||||
return array();
|
||||
}
|
||||
|
||||
if (!($collection instanceof PropelCollection)) {
|
||||
throw new UnexpectedTypeException($collection, '\PropelCollection');
|
||||
}
|
||||
|
||||
$array = array();
|
||||
|
||||
if (count($this->choiceList->getIdentifier()) > 1) {
|
||||
$availableModels = $this->choiceList->getModels();
|
||||
|
||||
foreach ($collection as $model) {
|
||||
$key = array_search($model, $availableModels);
|
||||
$array[] = $key;
|
||||
}
|
||||
} else {
|
||||
foreach ($collection as $model) {
|
||||
$array[] = current($this->choiceList->getIdentifierValues($model));
|
||||
}
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
public function reverseTransform($keys)
|
||||
{
|
||||
$collection = new PropelCollection();
|
||||
|
||||
if ('' === $keys || null === $keys) {
|
||||
return $collection;
|
||||
}
|
||||
|
||||
if (!is_array($keys)) {
|
||||
throw new UnexpectedTypeException($keys, 'array');
|
||||
}
|
||||
|
||||
$notFound = array();
|
||||
|
||||
foreach ($keys as $key) {
|
||||
if ($model = $this->choiceList->getModel($key)) {
|
||||
$collection->append($model);
|
||||
} else {
|
||||
$notFound[] = $key;
|
||||
}
|
||||
}
|
||||
|
||||
if (count($notFound) > 0) {
|
||||
throw new TransformationFailedException(sprintf('The models with keys "%s" could not be found', implode('", "', $notFound)));
|
||||
}
|
||||
|
||||
return $collection;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue