2017-02-10 39 views
0

我试图创建待办事项列表元素。 这是我的列表元素类:Symfony 3表单类型内部服务器错误:类型错误:参数1传递给AppBundle ...必须是AppBundle Form FromEvent的一个实例...

<?php 
/** 
* Created by PhpStorm. 
* User: Alan 
* Date: 03-Feb-17 
* Time: 3:18 AM 
*/ 

namespace AppBundle\Entity; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="Todos") 
*/ 
class Todos 
{ 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    private $name; 
    /** 
    * @ORM\Column(type="integer", length=100) 
    */ 
    private $categoryId; 
    /** 
    * @ORM\Column(type="integer", length=100) 
    */ 
    private $userId; 
    /** 
    * @ORM\Column(type="datetime", length=100) 
    */ 
    private $init_date; 
    /** 
    * @ORM\Column(type="datetime", length=100) 
    */ 
    private $comp_date; 

    //SETTERS AND GETTERS.... 

} 

为此,我已经产生了formType

<?php 
namespace AppBundle\Form; 

use .... 

class TodosType extends AbstractType 
{ 
    private $user; 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name', TextType::class, array(
      'label' => 'Nazwa', 
      'attr' => array(
       'class' => 'name-pick' 
      ) 
     )) 
     ->add('categoryId', HiddenType::class) 
     ->addEventListener(FormEvents::POST_SUBMIT, function(FromEvent $e){ 
      $e->getData()->setUserId($this->user->getId()); 
      $e->getData()->setInitDate($this->timestamp(new \DateTime())); 
     }); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Todos' 
     )); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function getBlockPrefix() 
    { 
     return 'appbundle_todos'; 
    } 

    public function __construct($storage) 
    { 
     $this->user = $storage->getToken()->getUser(); 
    } 
} 

和一个服务来获取用户编号:

app.form.todos: 
      class: AppBundle\Form\TodosType 
      arguments: ["@security.token_storage"] 
      tags: 
       - { name: form.type, alias: app_user_todos } 

现在在我的树枝上,我列出它是为了得到这样的分类ŸID值分配适当

{ form_start(form) }} 
          {{ form_widget(form.name) }} 
          {{ form_widget(form.categoryId, {'value': thisCat[0].id}) }} 
          {# TODO: FIND A BETTER WAY TO SEND THE categoryId#} 
          {{ form_end(form) }} 

其中关于提交是serializeArray()'d和发送到不应该做太多其他然后到指定值,并将其插入到数据库中我的Ajax控制器方法:

/** 
    * @Route("/ajax/addTodo", name="AddTodoAjax") 
    */ 
    public function AddTodoAjax(Request $request) 
    { 

     $form = $this->createForm(TodosType::class); 
     $form->handleRequest($request); 
     if($form->isValid() && $form->isSubmitted()){ 
      $todo = $form->getData(); 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($todo); 
      $em->flush(); 
      return $this->json($todo->getId()); 
     } 
    } 
} 

现在的问题是,在这种配置中运行的系统产生500(内部服务器错误)与错误的含量为:

Type error: Argument 1 passed to AppBundle\Form\TodosType::AppBundle\Form{closure}() must be an instance of AppBundle\Form\FromEvent, instance of Symfony\Component\Form\FormEvent given (500 Internal Server Error)


这是我第一次有这样的问题。

我试着在这里寻找这个问题,但所有类似的问题都不过是......非常相似。

有谁知道如何解决这个问题? 所有的帮助将是惊人的。

+4

FormEvent VS FromEvent ......你能看出其中的区别? – Cerad

+0

哈哈Cerad。 +1的评论和帮助! –

回答

2

在你的表单类型,你有

->addEventListener(FormEvents::POST_SUBMIT, function(FromEvent $e){ 

需要被

->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $e){ 
相关问题