Symfony2 (正確には 2.3) でいくつかのステップでフォームを実行したいのですが、これを実行しようとすると、フォームでエラーが発生します。
私は次のことをしました:
1) クラスを作成しました
class MyClass
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
* @Assert\NotNull()
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="surname", type="string", length=255)
* @Assert\NotNull()
*/
private $surname;
}
2) FormType クラスを作成しました:
class MyClassType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', null, array('label' => 'name'))
->add('surname', null, array('label' => 'surname'));
}
そして、フォームのデータを取得するプロセスを分離するために、さらに 2 つのクラスを作成しました。
class MyClass1Type extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', null, array('label' => 'name'));
}
class MyClass2Type extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('surname', null, array('label' => 'surname'));
}
そしてコントローラーにはいくつかのメソッドがあります:
public function new1Action()
{
$entity = new MyClass();
$form = $this->createForm( new MyClass1Type( $entity );
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
public function new2Action(Request $request)
{
$entity = new MyClass();
$formMyClass1 = $this->createForm(new MyClass1Type($entity) );
$formMyClass1->bind($request);
if (!$formMyClass1->isValid()) {
print_r($formMyClass1->getErrors());
return new Response("Error");
}
$form = $this->createForm( new MyClass2Type($entity) );
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
最初のフォーム (new1Action) をレンダリングすると、データは完全に取得されますが、問題はデータを送信するときです。new2Action では、フォームが無効であるため、アプリケーションは response("error") コードをスローします。print_r() 関数は、次の情報を表示します。
Array ( [0] => Symfony\Component\Form\FormError Object ( [message:Symfony\Component\Form\FormError:private] => Este valor no deberÃa ser null. [messageTemplate:protected] => This value should not be null. [messageParameters:protected] => Array ( ) [messagePluralization:protected] => ) )
問題は、最初のフォームで取得したデータでクラスが完全ではないことだと思いますが、フォームを2つのステップに分ける必要があり、このエラーにどう対処するかわかりません。
誰かが私を助けることができますか?
前もって感謝します。