4

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つのステップに分ける必要があり、このエラーにどう対処するかわかりません。

誰かが私を助けることができますか?

前もって感謝します。

4

1 に答える 1