使用 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,因为它包含您入门所需的大部分信息。
仍在学习 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,因为它包含您入门所需的大部分信息。