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
{
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)
);
}
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 → ?