私はtodo-list要素を作成しようとしています。私はにformTypeSymfony 3フォームタイプ内部サーバエラー:タイプエラー:引数1がAppBundleに渡されました... AppBundle Form FromEventのインスタンスでなければなりません...
<?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();
}
}
そして取得するためのサービスを生成している。このため、ユーザーIdを
<?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....
}
: は、これは私のリストの要素のクラスである
app.form.todos:
class: AppBundle\Form\TodosType
arguments: ["@security.token_storage"]
tags:
- { name: form.type, alias: app_user_todos }
今、私の小枝では、カテゴリを持つためにはそういうようにリストアップされていますyのID値は、適切に提出する上serializeArray()'d
ある
{ 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) }}
を割り当てられ、値を代入し、それらをデータベースに挿入するために、他の多くを行うことになっていない私の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にする必要がある
を持っている...あなたは違いを見つけることができますか? – Cerad
Ha Ha Cerad。コメントと助けのために+1! –