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 回答