मैं एक SILEX आवेदन (स्रोत here है)
App\Form\DataTransformer
मैं एक MetadataTransformer वर्ग है में निर्माण कर रहा हूँ।
लेकिन transform
विधि काम नहीं करती है (रिवर्स ट्रांसफॉर्म करता है)।
यह App\Form\Metadata AbstractType
पर लागू होता है, जो App\Form\ArticleForm AbstractType
में संग्रह का हिस्सा है।
पिछले प्रपत्र मेरी App\Controller\Admin\ArticleAdminController
मेरे ट्रांसफार्मर (मॉडल डेटा से डेटा के रूप में) काम नहीं करता है
डेटा ट्रांसफार्मर की विधि संपादन में कहा जाता है एक "प्रपत्र डेटा" की तरह में इस
{"key":"value"}
की तरह एक मानचित्र डेटा में माना जाता है:
[{"name":"key","value":"key"}]
तो इसे संग्रह के रूप में प्रदर्शित किया जा सकता है।
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";
}
}
मेरे डेटा ट्रांसफार्मर दिखना चाहिए:
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;
}
}
}
reverseTransform काम करता है, लेकिन transfom ही प्रतीत नहीं होता है।
लक्ष्य यहाँ एक रूप में एक गतिशील संग्रह प्रदर्शित करने के लिए सक्षम होने के लिए है (जोड़ सकते हैं और metadatas मेरे लेख प्रपत्र पेज में गतिशील रूप से निकालने के लिए) (रेपो में
मैं इसे काम करने के लिए कोड को बदलने के लिए जोड़ने यानी बदलने ट्रांसफॉर्मर में इसे करने के बजाय नियंत्रक ArticleAdminController में डेटा)
यदि मैं रनटाइम पर ट्रांसफॉर्म का परिणाम लॉग करता हूं, तो परिणाम मैं अपेक्षा करता हूं, लेकिन फॉर्म इसका उपयोग नहीं करेगा।
मैं पहले से ही addViewTransformer/addModelTransformer 2.1 एपीआई की कोशिश की, लेकिन यह कोई फर्क नहीं किया।
तो क्या अपने मॉडल डेटा के साथ गलत क्या है -> करने के लिए -> प्रपत्र डेटा को बदलने?
मैं उत्तर नहीं पता, लेकिन मैं दुर्भाग्य से एक समान समस्या है। :( – fazy