【问题标题】:Save user's ID in database with Symfony 2.6使用 Symfony 2.6 将用户 ID 保存在数据库中
【发布时间】:2015-04-30 23:45:00
【问题描述】:

仍然在使用 Symfony,所以如果有人问过这个问题,请原谅。我不太明白如何将数据发送到表单以进行正确处理,因此需要一些指导。

我的问题是我希望在他们创建新壁虎时将我的登录用户 ID 保存到数据库中(这样壁虎的个人资料只显示此登录用户)。顺便说一句,我正在使用 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';
    }
}

我非常感谢任何帮助。我只是无法理解数据是如何使用/发送的。在此先感谢:)

安迪

【问题讨论】:

    标签: php symfony fosuserbundle


    【解决方案1】:

    如果您知道这一点,首先很抱歉,但您需要在 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 = 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 和 databases & doctrine documentation,因为那里包含您入门所需的大部分信息。

    【讨论】:

    • 不需要外层的if。 $form-&gt;handleRequest($request); 后跟 if ($form-&gt;isValid()) { 就足够了。
    • 我现在要试试这个,看看它是否有效。我知道人际关系,但我不确定我是否需要这样做。谢谢你,如有任何问题会尽快报告:)
    • @keyboardSmasher 我放弃了外部 if 它确实可以正常工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多