duanmao9918
2017-06-22 11:16
浏览 39
已采纳

Symfony 3子表单作为数组而不是实体提交

I am in the middle of converting a project from Symfony 2 to Symfony 3 and have run into a problem. I have an Event entity that has a TwitterSearch entity which is defined by the following in Event.php:

   /**
    * @ORM\ManyToOne(targetEntity="TwitterSearch", cascade={"persist"})
    * @ORM\JoinColumn(name="twitter_search_id", referencedColumnName="id")
    */
    private $twitterSearch;

This is how I have set up the relationship in the EventType:

    $builder->add('twitterSearch', TwitterSearchType::class, array(
        'required'=>false,
    ));

Here is the code from the controller for when the form is submitted:

    $entity = new Event();
    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);

    if ($form->isValid()) { 
       $entity = $form->getData();
       $em = $this->getDoctrine()->getManager();
       $em->persist($entity);
       $em->flush();
    }

This used to work in Symfony 2 but now when the form is submitted the following error is thrown:

Expected value of type "TwitterSearch" for association field "Event#$twitterSearch"
, got "array" instead.

I debugged the code and the twitterSearch attribute of the Event was and array. Does anyone know why it is no longer converting this to an instance of TwitterSearch?

图片转代码服务由CSDN问答提供 功能建议

我正在将项目从Symfony 2转换为Symfony 3并遇到问题。 我有一个Event实体,它有一个TwitterSearch实体,由Event.php中的以下内容定义:

  / ** 
 * @ORM \ ManyToOne(targetEntity =“TwitterSearch  “,cascade = {”persist“})
 * @ORM \ JoinColumn(name =”twitter_search_id“,referencedColumnName =”id“)
 * / 
 private $ twitterSearch; 
    
 
 

这就是我在EventType中设置关系的方式:

  $ builder-> add('twitterSearch',TwitterSearchType :: class,  array(
'required'=> false,
)); 
   
 
 

以下是控制器提交表单时的代码:

  $ entity = new Event(); 
 $ form = $ this-> createCreateForm($ entity); 
 $ form-> handleRequest($ request); \  n 
 if($ form-> isValid()){
 $ entity = $ form-> getData(); 
 $ em = $ this-> getDoctrine() - > getManager(); \  n $ em-> persist($ entity); 
 $ em-> flush(); 
} 
   
 
 

这曾经用于Symfony 2 BU 现在,当提交表单时,抛出以下错误:

 关联字段“Event#$ twitterSearch”的类型“TwitterSearch”的预期值
,得到“数组” 而不是。
   
 
 

我调试了事件的代码和twitterSearch属性和数组。 有谁知道为什么它不再将其转换为TwitterSearch的实例?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douti0467 2017-06-22 11:22
    已采纳

    Use EntityType instead.

    Example:

    $builder->add('twitterSearch', EntityType::class, array(
        'class' => TwitterSearch::class,
        'choice_label' => 'name',
    ));
    
    点赞 评论

相关推荐 更多相似问题