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;
}
}
ありがとう ;)