Sto costruendo un'applicazione selce (la fonte è here)
Nel App\Form\DataTransformer
ho una classe MetadataTransformer.
Ma il metodo transform
non funziona (la trasformazione inversa lo fa).
Si applica a un App\Form\Metadata AbstractType
, che fa parte di una raccolta in un App\Form\ArticleForm AbstractType
.
L'ultima forma è chiamato nel metodo di modifica della mia App\Controller\Admin\ArticleAdminController
mio trasformatore non funziona (da dati del modello per formare i dati)
Il trasformatore di dati si suppone per mappare un dato come questo
{"key":"value"}
in un "dati del modulo" come:
[{"name":"key","value":"key"}]
Quindi può essere visualizzato come una raccolta.
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";
}
}
mio trasformatore di dati dovrebbe essere simile:
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;
}
}
}
Il reverseTransform funziona, ma il transfom in sé non sembra.
L'obiettivo qui è quello di essere in grado di visualizzare una collezione dinamica in una forma (aggiungere e rimuovere metadatas dinamicamente nella mia pagina forma di articolo)
Nel repo aggiungo per modificare il codice per farlo funzionare (ad esempio trasformando il dati nel ArticleAdminController di controllo, invece di farlo nel trasformatore)
Se entro il risultato della trasformazione in fase di esecuzione, il risultato è quello che mi aspettavo, ma la forma non lo uso.
ho provato già l'addViewTransformer/addModelTransformer 2.1 api, ma non ha fatto alcuna differenza.
Così come ciò che è sbagliato con il mio modello di dati -> a -> dati del modulo trasformano?
non so la risposta, ma io, purtroppo, un problema simile. :( – fazy