2

以下の両方のシナリオを処理する単一のフォーム タイプを作成することは可能ですか?

「通常の」ユーザー (ROLE_USER など) がフォームに入力してタスクを実行できるアプリケーションを開発しています。レコードが作成されると、彼はイベント テーブルにリンクされます。さらに、ROLE_ADMIN ユーザーは、ユーザーのリストからユーザーを選択して、代わりに (同じフォームに「ユーザー」フィールドを追加して) ユーザーをリンクできます。

現時点では、「eventType」と「eventAdminType」のコードが 98% 重複しています。トランスフォーマーとフォームイベントについて読んだことがありますが、それらを自分のニーズに適応させる方法が完全にはわかりません。

「eventType」のフォームコード:

$builder
    ->add(
        'reservedSlots', 'choice', array(
            'choices'   => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5'),
            'required'  => true,
        )
    )

「eventAdminType」のフォームコード:

$builder
    ->add('user')
    ->add(
        'reservedSlots', 'choice', array(
            'choices'   => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5'),
            'required'  => true,
        )
    )

エンティティ コード:

class EventUser
{
...
/**
 * @ORM\OneToOne(targetEntity="User")
 * @var type
 */
private $user;
...
// all the other fields
/**
 *
 * @ORM\Column(type="integer")
 */
private $reservedSlots

上記の単一のフォームタイプを作成するにはどうすればよいですか?

4

1 に答える 1

1

両方の型のフォーム型クラスを作成し、一方をもう一方に拡張することができます。

namespace Acme\Bundle\DemoBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class EventType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        // some code
    }
}

namespace Acme\Bundle\DemoBundle\Form;

use Symfony\Component\Form\FormBuilder;

class EventAdminType extends EventType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        parent::buildForm($builder, $options);

        // fields for the admin form
    }
}

フォームクラスの作成に関する追加情報は次のとおりです。

于 2012-07-15T21:48:43.610 に答える