是否可以制作单一表单类型来处理以下两种情况?
我正在开发一个应用程序,其中“普通”用户(例如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
我如何创建上面的单一表单类型?
答案 0 :(得分: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
}
}
以下是有关creating form classes的其他信息。