My transformer is not working (from model data to generate data)

I am creating a silex application (source here )
In App\Form\DataTransformerI have a MetadataTransformer class.
But the method transformdoes not work (this does the inverse transformation).
It applies to App\Form\Metadata AbstractType, which is part of the collection in App\Form\ArticleForm AbstractType.
The last form is called in the editing method of myApp\Controller\Admin\ArticleAdminController

The data converter is supposed to display data like this

{"key":"value"}

In "form data", for example:

[{"name":"key","value":"key"}] 

Thus, it can be displayed as a collection.

Metadata.php

class MetaData extends AbstractType
{
    protected $span4 = "span4";
    protected $span3 = "span3";

    public function buildForm(FormBuilderInterface $builder,array $options)
    {
        $builder
            ->add('name', 'text', array(
                "label" => ' ',
                "attr"  => array(
                    "class"       => $this->span3,
                    "placeholder" => "name"
                )
            ))
            ->add('value', 'text', array(
                'label' => ' ',
                'attr'  => array(
                    "class"       => $this->span4,
                    'placeholder' => 'value'
                )
            ))
        ;
    }

    public function getName()
    {
        return "MetaData";
    }
}

ArticleForm.php

class ArticleForm extends AbstractType
{
    // ...some code...

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $transformer = new TagsToArrayTransformer();
        $metadataTransformer = new MetadataTransformer();

        $builder->add("title", "text", array(
            "required" => true,
            "attr"     => array(
                "class"       => $this->defaultClass,
                "placeholder" => "The title"
            )
        ));
        $builder->add("content", "textarea", array(
            "attr" => array(
                "placeholder" => "the content",
                "rows"        => 20,
                "class"       => $this->defaultClass
            )
        ));
        $builder->add(
            $builder->create('metadatas', 'collection', array(
                "type"         => new MetaData(),
                'allow_add'    => true,
                'allow_delete' => true,
                'by_reference' => false,
            ))
            ->addModelTransformer($metadataTransformer)
        );

        // ...some code...
    }

    public function getName()
    {
        return "article";
    }
}

My data transformer should look like this:

MetadataTransformer.php

namespace App\Form\DataTransformer;

use Symfony\Component\Form\DataTransformerInterface;

class MetadataTransformer implements DataTransformerInterface
{
    function transform($metadatas)
    {
        foreach($metadatas as $key => $value) {
            $result[] = array('name' => $key, 'value' => $value);
        }

        return $result;
    }

    function reverseTransform($metadatas)
    {
        if(is_array($metadatas)) {
            foreach($metadatas as $value) {
                $result[$value['name']] = $value['value'];
            }

            return $result;
        }
    }
}

, .
, ( ).

, , (.. ArticleAdminController, Transformer)
, , , .

addViewTransformer/addModelTransformer 2.1 api, .

, → to → ?

+5
2

- , . . :

namespace App\Form\DataTransformer{
use Symfony\Component\Form\DataTransformerInterface;
class MetadataTransformer implements DataTransformerInterface{

function transform($metadatas){
  foreach($metadatas as $key=>$value):
    $result[]=array('name'=>$key,'value'=>$value);
  endforeach;
  $results=new \Doctrine\Common\Collections\ArrayCollection($result);
  return $results;
}

function reverseTransform($metadatas){
  if(is_array($metadatas)){
    foreach($metadatas as $value){
      $result[$value['name']]=$value['value'];
    }
    return $result;
    }
  }
}
+3

:

function transform($metadatas) {
    $results = array();
    foreach ($metadatas as $key => $value) {
        $results['name'] = $key;
        $results['value'] = $value;
    }
    return $results;
}
-1

All Articles