0

FOSUSerBundle の登録フォームにフィールドを追加するには、あなたの助けが必要です。ユーザーをローカライズし、登録フォームに緯度/経度を保存したいと考えています。User エンティティと Localization エンティティの間に 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 に答える