使用 Symfony 2.6 将用户 ID 保存在数据库中

Save user's ID in database with Symfony 2.6

仍在学习 Symfony,所以如果有人问过这个问题,请原谅。我不太了解如何将数据发送到要正确处理的表单,因此需要一些指导。

我的问题是,当他们创建新的 gecko 时,我希望将我登录的用户 ID 保存到数据库中(以便此 gecko 的个人资料仅针对此登录用户显示)。顺便说一句,我正在使用 FOSUserBundle。

我知道我可以通过使用诸如$user = $this->getUser()->getId();之类的东西来获取当前用户的 ID 但是,我想将其保存到数据库中。

创建动作:

public function createAction(Request $request)
    {
        $entity = new Gecko();
        $form = $this->createCreateForm($entity);
        $form->handleRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $em->flush();

            return $this->redirect($this->generateUrl('gecko_show', array('name' => $entity->getName())));
        }

        return array(
            'entity' => $entity,
            'form'   => $form->createView(),
        );
    }

壁虎类型:

<?php

namespace Breedr\GeckoBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class GeckoType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('aquisitionDate')
            ->add('morph')
            ->add('sex', 'choice', array(
                'choices' => array(
                    'Male' => 'Male',
                    'Female' => 'Female'
                )
            ))
            ->add('genetics')
            ->add('bio')
            ->add('bred', 'checkbox', array(
                'required' => false
            ))
            ->add('hatchling', 'checkbox', array(
                'required' => false
            ))
            ->add('clutch', 'text', array(
                'data' => 0,
                'required' => false
            ))
            ->add('imageFile', 'file', array(
                'required' => false
            ))
            ->add('user_id', 'hidden', array(
                'data' => $user,
            ))
        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Breedr\GeckoBundle\Entity\Gecko'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'breedr_geckobundle_gecko';
    }
}

如果能提供帮助,我将不胜感激。我只是无法理解数据是如何 used/sent。提前致谢:)

安迪

首先抱歉,如果您知道这一点,但您需要在 Gecko 和用户实体之间建立正确的关系。

请注意,您的@ORM 注释可能与我的不同(或者您可能使用的是 YAML 或其他)。我的使用是:

use Doctrine\ORM\Mapping as ORM;

这应该在您的 Gecko 实体中

/**
 * @ORM\ManyToOne(targetEntity="Your\NameSpace\Entity\User", inversedBy="geckos")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
protected $user;

这应该在您的用户实体中

/**
 * @ORM\OneToMany(targetEntity="Your\NameSpace\Entity\Gecko",mappedBy="user")
 */
protected $geckos;

请注意,您需要 generate getters & setters

要保存您的新 Gecko:

$gecko = new Gecko();
$gecko->setUser($this->getUser());

$form = $this->createForm(new GeckoType(), $gecko);

$entityManager = $this->getDoctrine()->getManager();

if ($request->isMethod('POST')) {

    $form->submit($request);

    if ($form->isValid()) {

        $entityManager->persist($gecko);
        $entityManager->flush();

        // do something with success

    } else {

        // show errors by flash message or whatever
    }
}

我建议您阅读 symfony forms documentation & the databases & doctrine documentation,因为它包含您入门所需的大部分信息。