Php 根据上下文交换表单字段类型的更好方法

Php 根据上下文交换表单字段类型的更好方法,php,symfony,Php,Symfony,是否可以创建一个表单类型来处理以下两种情况 我正在开发一个应用程序,其中“普通”用户(例如ROLE_用户)可以通过填写表单来执行任务。创建记录时,他将链接到事件表。此外,ROLE_ADMIN用户可以代表他们链接用户(使用带有附加“用户”字段的相同表单),从用户列表中选择用户 目前,我有一个“eventType”和一个“eventAdminType”,代码重复率为98%。我读过《变形金刚》和《变形金刚》的相关书籍,但我并不完全确定如何使它们适应我的需要 “eventType”的表单代码: “eve

是否可以创建一个表单类型来处理以下两种情况

我正在开发一个应用程序,其中“普通”用户(例如ROLE_用户)可以通过填写表单来执行任务。创建记录时,他将链接到事件表。此外,ROLE_ADMIN用户可以代表他们链接用户(使用带有附加“用户”字段的相同表单),从用户列表中选择用户

目前,我有一个“eventType”和一个“eventAdminType”,代码重复率为98%。我读过《变形金刚》和《变形金刚》的相关书籍,但我并不完全确定如何使它们适应我的需要

“eventType”的表单代码:

“eventAdminType”的表单代码:

实体代码:

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

我将如何创建上述单个表单类型

您可以为这两种类型创建表单类型类,并让一种类型扩展另一种类型:

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
    }
}


这里有一些关于的附加信息。

我喜欢它。有时候答案很简单!谢谢你,吉尔登
class EventUser
{
...
/**
 * @ORM\OneToOne(targetEntity="User")
 * @var type
 */
private $user;
...
// all the other fields
/**
 *
 * @ORM\Column(type="integer")
 */
private $reservedSlots
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
    }
}