我试图创建待办事项列表元素。 这是我的列表元素类: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)
这是我第一次有这样的问题。
我试着在这里寻找这个问题,但所有类似的问题都不过是......非常相似。
有谁知道如何解决这个问题? 所有的帮助将是惊人的。
FormEvent VS FromEvent ......你能看出其中的区别? – Cerad
哈哈Cerad。 +1的评论和帮助! –