0
我的工作,我用選擇2場中爲AJAX請求symfony的形式,我聽PRE_SUBMIT
事件得到選項列表,分給choices
選項Symfony的形式事件:ChoiceType場返回NULL意外
$opts = $config->getOptions();
$opts['choices'] = $listImages; //array of Image object
,但在我的var_dump得到的形式選擇的值,並且在封閉使用它,而當持續領域擁有空值PRE_SUBMIT
事件,所以我在POST_SUBMIT
事件現場做的var_dump具有真正的價值。而且我看不出有什麼我錯過
我下面FormType:
class ArticleType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('image', ChoiceType::class, array(
'expanded' => false,
'multiple' => false))
//other field
;
$formModifier = function (FormInterface $form, $image) use ($options) {
$listImages = $options['em']->getRepository('AlmotivAppBundle:Image')->findBy(array(
'id' => $image
));
if (!$listImages) {
$form->add('image')->addError(new FormError(
'Nous n\'avons pas p trouver l\'image, veuiller choisir une autre'
));
}
//die(var_dump($listImages)); //array of Image object
$config = $form->get('image')->getConfig();
$opts = $config->getOptions();
$opts['choices'] = $listImages;
$typeName = get_class($config->getType()->getInnerType());
$form->add('image', $typeName, $opts);
//die(var_dump($form->get('image')->getConfig()->getData())); //return null
};
$builder->get('image')->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$image = $event->getData();
//die(var_dump($image)); //return 10
$formModifier($event->getForm()->getParent(), $image);
}
);
和我使用的框架V3.1。 如果你需要更多的問題。
要堅持它在數據庫中,該字段有一個'ManyToOne'關係,所以我需要將選定的選項的值傳遞給Doctrine,如果我沒有收到類似於該值無效的錯誤。正如我所看到的,施工後您無法更改字段的配置,如果我錯了,請糾正我,但您可以覆蓋它,以便我做到了,並知道我丟失了數據。現在的問題是如何將'imageList'傳遞給'$ options [options]'而不會丟失數據字段? –
和@JovanPerovic我不認爲重新添加字段是一個問題原因,當我傳遞'$ event'到閉包並執行'$ event-> getData();'在'POST_SUBMIT'事件中我得到了提交數據,然後我重新添加字段在PRE_SUBMIT事件,而神祕的事情是做'$ event-> getForm();'在POST_SUBMIT我的圖像字段有'空值'和我的其他字段有正確的價值。我該如何處理? –
我有兩個解決方案來處理這1-是設置數據在自己的形式,因爲我不明白爲什麼圖像總是有空值。 2-使用未映射,然後與事件添加我的圖像字段與文本類型的提交數據(這不是最好的方式,我認爲(原因圖像與我的文章實體有很多關係),但是我唯一找到) –