0

我需要您的帮助才能在 FOSUSerBundle 的注册表单中添加一些字段。我想本地化一个用户并将他的纬度/经度保存在注册表中。我在我的用户实体和我的本地化实体之间创建了 oneToOne 关系,但我看不到我可以将代码放在哪里来设置用户在注册阶段的纬度和经度。

我是否必须覆盖注册控制器或某些事件?我只是看不到我的代码放在哪里...

首先,这里的文档没有针对新的签名方法进行更新:https ://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_controllers.md

本教程还可以,但我看不到如何将它与 oneToOne 字段一起使用...: http ://www.idci-consulting.fr/fosuserbundle-comment-gerer-les-utilisateurs-avec-symfony2/

事实上,我在用于 FOSUserBundle 的 User 实体中添加了我的关系:

<?php

namespace rs\UserBundle\Entity;

use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use FOS\MessageBundle\Model\ParticipantInterface;

/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 */
class User extends BaseUser implements ParticipantInterface
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\OneToOne(targetEntity="rs\UserBundle\Entity\Localisation", cascade={"persist"})
     */
    protected $localisation;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set localisation
     *
     * @param \rs\UserBundle\Entity\Localisation $localisation
     * @return User
     */
    public function setLocalisation(\rs\UserBundle\Entity\Localisation $localisation = null)
    {
        $this->localisation = $localisation;

        return $this;
    }

    /**
     * Get localisation
     *
     * @return \rs\UserBundle\Entity\Localisation 
     */
    public function getLocalisation()
    {
        return $this->localisation;
    }
}

这是我的本地化实体:

<?php

namespace rs\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Localisation
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Localisation
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * @var float
     *
     * @ORM\Column(name="latitude", type="decimal")
     */
    private $latitude;

    /**
     * @var float
     *
     * @ORM\Column(name="longitude", type="decimal")
     */
    private $longitude;

    /**
     * @var integer
     *
     * @ORM\OneToOne(targetEntity="rs\UserBundle\Entity\Clan", cascade={"persist"})
     */
    private $clan;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }


    /**
     * Set latitude
     *
     * @param float $latitude
     * @return Localisation
     */
    public function setLatitude($latitude)
    {
        $this->latitude = $latitude;

        return $this;
    }

    /**
     * Get latitude
     *
     * @return float 
     */
    public function getLatitude()
    {
        return $this->latitude;
    }

    /**
     * Set longitude
     *
     * @param float $longitude
     * @return Localisation
     */
    public function setLongitude($longitude)
    {
        $this->longitude = $longitude;

        return $this;
    }

    /**
     * Get longitude
     *
     * @return float 
     */
    public function getLongitude()
    {
        return $this->longitude;
    }



    /**
     * Set clan
     *
     * @param \rs\UserBundle\Entity\Clan $clan
     * @return Localisation
     */
    public function setClan(\robStorm\UserBundle\Entity\Clan $clan = null)
    {
        $this->clan = $clan;

        return $this;
    }

    /**
     * Get clan
     *
     * @return \rs\UserBundle\Entity\Clan 
     */
    public function getClan()
    {
        return $this->clan;
    }
}

谢谢 ;)

4

1 回答 1

0

您必须覆盖/扩展现有的 RegistrationFormType。请参阅文档中的覆盖表单。在您的类型中,您将位置添加为子表单。所以你也必须创建一个 LocationFormType 。

如果您需要处理一些日志,则必须使用 events 连接到控制器。不幸的是,事件仅在 dev-master 中可用,而不在稳定版本中。如果您强制使用稳定版本,则必须覆盖控制器并从旧控制器复制所有逻辑,然后添加您的逻辑。

于 2013-04-29T11:35:38.787 回答