Symfony2形式实体字段不同的beahviour

时间:2015-06-19 10:26:00

标签: php forms symfony entity symfony-2.6

我使用Symfony2几个月了。我能够完成CRUD等基本操作。 但是我现在面临一个问题,关于双实体形式行为。 我有一个独特的形式,其中有2个实体连接到2个不同的表:

  • 宾客
  • 来宾建议的电子邮件

其中每个email_id都是访客行中的外键。 每个访客可能没有电子邮件,而不是该特定行的空外键。

一旦用户发送了表单,就会将新记录保存到guest表中,但我希望将字段电子邮件(属于另一个实体)保存到另一个表中并执行一些检查:

  • 如果电子邮件出现在表格中,则不应保存,但我需要将其ID作为外键保存到新的访客行中;
  • 如果电子邮件不在表格中,则必须保存并连接到新访客;
  • 如果访客未填写任何电子邮件,则必须将空外键放在访客上,并且不会将任何记录保存到电子邮件表中。

我发现了许多关于实体形式CRUD操作的文章,但很少或根本没有关于如何根据Symfony2中的特定字段自定义插入/更新。

有人可以解释我该怎么做,或者是否有人知道文章/例子,请他能否向我报告那些文章?

这是以下形式的片段:

class InYourMindType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('title', 'text', array(
            'label' => 'label_think_title',
            'required' => true,
            'attr' => array(
                'title' => 'label_think_title',
                'class' => 'form-control'
            )
        ))->add('thinkFriend',
                new InYourMindFriendType

其中新的InYourMindFriendType是电子邮件。而是在控制器的代码段下面。目前只是一种保存表格的简单方法

function sendInYourMindAction(Request $request)
{
    $EnForm = new InYourMind;

    $form = $this->createForm(new InYourMindType, $EnForm);

    if ($request->getMethod() === 'POST') {
        $form->bind($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()
                    ->getEntityManager();
            $em->merge($EnForm);
            $em->flush();

            $this->get('session')
                    ->getFlashBag()
                    ->set('think-success-notice', 'message successfully sent');

            return $this->redirect($this->generateUrl('commonMainBundle_homepage'));
        }
    }


    return 'something';

} 

0 个答案:

没有答案