2014-01-10 44 views
0

我有一個表格中有不同字段的用戶。而且我還有一個桌面玩家,其中包含FK user_id(沿其他字段)。從其他表格中添加數據+ Symfony2

現在我有一個registerForm來創建一個用戶,但我也想爲一個玩家添加一個字段。

這是我現在的形式:

$builder 
    ->add('userFirstname', 'text', [ 
     'label' => 'Given name', 
     'attr' => [ 
      'placeholder' => 'Enter your given name.', 
     ], 
    ]) 
    ->add('userSurname', 'text', [ 
     'label' => 'Family name', 
     'attr' => ['placeholder' => 'Enter your family name.'], 
    ]) 
    ->add('userType', 'choice', array(
     'choices' => array('E' => 'ENTHOUSIAST', 'P' => 'PLAYER', 'T' => 'TRAINER'), 
     'label'   => 'User Type', 
     'attr' => array('placeholder' => 'User Type') 
    )) 
    ->add('player') 
    ->add('userUsername', 'text', [ 
     'label' => 'Username', 
     'attr' => ['placeholder' => 'Enter a username.'], 
    ]) 
    ->add('userEmail', 'email', [ 
     'label' => 'Email address', 
     'attr' => ['placeholder' => 'Enter your email address.'], 
    ]) 
    ->add('userPassword', 'repeated', [ 
     'type'   => 'password', 
     'first_name'  => 'password', 
     'first_options' => [ 
      'label' => 'Password', 
      'attr' => ['placeholder' => 'Enter a password.'], 
     ], 
     'second_name' => 'confirm', 
     'second_options' => [ 
      'label' => 'Password (repeat)', 
      'attr' => ['placeholder' => 'Repeat the password.'], 
     ], 
     'invalid_message' => 'The passwords are not identical.', 
    ]) 
    ->add('btn_register', 'submit', [ 
     'label' => 'Register', 
    ]) 
; 

在我的球員表我有 'player_birthyear'。我怎樣才能把這個添加到我的表單中?我已經嘗試添加player.birthyear到我的表單,但沒有奏效。

UPDATE:
用戶實體類:

/** 
* Users 
* 
* @ORM\Table(name="users", indexes={@ORM\Index(name="fk_users_roles1_idx", columns={"role_id"})}) 
* @ORM\Entity 
*/ 
class Users 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_username", type="string", length=45, nullable=false) 
    */ 
    private $userUsername; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_firstname", type="string", length=45, nullable=false) 
    */ 
    private $userFirstname; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_surname", type="string", length=255, nullable=false) 
    */ 
    private $userSurname; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_email", type="string", length=255, nullable=false) 
    */ 
    private $userEmail; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_type", type="string", nullable=false) 
    */ 
    private $userType; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_password", type="string", length=60, nullable=false) 
    */ 
    private $userPassword; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_salt", type="string", length=30, nullable=false) 
    */ 
    private $userSalt; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="user_token", type="string", length=45, nullable=true) 
    */ 
    private $userToken; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_created", type="datetime", nullable=false) 
    */ 
    private $userCreated; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_modified", type="datetime", nullable=true) 
    */ 
    private $userModified; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_deleted", type="datetime", nullable=true) 
    */ 
    private $userDeleted; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_lastlogin", type="datetime", nullable=true) 
    */ 
    private $userLastlogin; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_confirmed", type="datetime", nullable=true) 
    */ 
    private $userConfirmed; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="user_locked", type="datetime", nullable=true) 
    */ 
    private $userLocked; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="user_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $userId; 

    /** 
    * @var \VolleyScout\VolleyScoutBundle\Entity\Roles 
    * 
    * @ORM\ManyToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Roles") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="role_id", referencedColumnName="role_id") 
    * }) 
    */ 
    private $role; 

    /** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\ManyToMany(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Teams", inversedBy="user") 
    * @ORM\JoinTable(name="user_follows_teams", 
    * joinColumns={ 
    *  @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") 
    * }, 
    * inverseJoinColumns={ 
    *  @ORM\JoinColumn(name="team_id", referencedColumnName="team_id") 
    * } 
    *) 
    */ 
    private $team; 

    /** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\ManyToMany(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Competitions", inversedBy="user") 
    * @ORM\JoinTable(name="user_follows_competitions", 
    * joinColumns={ 
    *  @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") 
    * }, 
    * inverseJoinColumns={ 
    *  @ORM\JoinColumn(name="competition_id", referencedColumnName="competition_id") 
    * } 
    *) 
    */ 
    private $competition; 

    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->team = new \Doctrine\Common\Collections\ArrayCollection(); 
     $this->competition = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 


    /** 
    * Set userUsername 
    * 
    * @param string $userUsername 
    * @return Users 
    */ 
    public function setUserUsername($userUsername) 
    { 
     $this->userUsername = $userUsername; 

     return $this; 
    } 

    /** 
    * Get userUsername 
    * 
    * @return string 
    */ 
    public function getUserUsername() 
    { 
     return $this->userUsername; 
    } 

    /** 
    * Set userFirstname 
    * 
    * @param string $userFirstname 
    * @return Users 
    */ 
    public function setUserFirstname($userFirstname) 
    { 
     $this->userFirstname = $userFirstname; 

     return $this; 
    } 

    /** 
    * Get userFirstname 
    * 
    * @return string 
    */ 
    public function getUserFirstname() 
    { 
     return $this->userFirstname; 
    } 

    /** 
    * Set userSurname 
    * 
    * @param string $userSurname 
    * @return Users 
    */ 
    public function setUserSurname($userSurname) 
    { 
     $this->userSurname = $userSurname; 

     return $this; 
    } 

    /** 
    * Get userSurname 
    * 
    * @return string 
    */ 
    public function getUserSurname() 
    { 
     return $this->userSurname; 
    } 

    /** 
    * Set userEmail 
    * 
    * @param string $userEmail 
    * @return Users 
    */ 
    public function setUserEmail($userEmail) 
    { 
     $this->userEmail = $userEmail; 

     return $this; 
    } 

    /** 
    * Get userEmail 
    * 
    * @return string 
    */ 
    public function getUserEmail() 
    { 
     return $this->userEmail; 
    } 

    /** 
    * Set userType 
    * 
    * @param string $userType 
    * @return Users 
    */ 
    public function setUserType($userType) 
    { 
     $this->userType = $userType; 

     return $this; 
    } 

    /** 
    * Get userType 
    * 
    * @return string 
    */ 
    public function getUserType() 
    { 
     return $this->userType; 
    } 

    /** 
    * Set userPassword 
    * 
    * @param string $userPassword 
    * @return Users 
    */ 
    public function setUserPassword($userPassword) 
    { 
     $this->userPassword = $userPassword; 

     return $this; 
    } 

    /** 
    * Get userPassword 
    * 
    * @return string 
    */ 
    public function getUserPassword() 
    { 
     return $this->userPassword; 
    } 

    /** 
    * Set userSalt 
    * 
    * @param string $userSalt 
    * @return Users 
    */ 
    public function setUserSalt($userSalt) 
    { 
     $this->userSalt = $userSalt; 

     return $this; 
    } 

    /** 
    * Get userSalt 
    * 
    * @return string 
    */ 
    public function getUserSalt() 
    { 
     return $this->userSalt; 
    } 

    /** 
    * Set userToken 
    * 
    * @param string $userToken 
    * @return Users 
    */ 
    public function setUserToken($userToken) 
    { 
     $this->userToken = $userToken; 

     return $this; 
    } 

    /** 
    * Get userToken 
    * 
    * @return string 
    */ 
    public function getUserToken() 
    { 
     return $this->userToken; 
    } 

    /** 
    * Set userCreated 
    * 
    * @param \DateTime $userCreated 
    * @return Users 
    */ 
    public function setUserCreated($userCreated) 
    { 
     $this->userCreated = $userCreated; 

     return $this; 
    } 

    /** 
    * Get userCreated 
    * 
    * @return \DateTime 
    */ 
    public function getUserCreated() 
    { 
     return $this->userCreated; 
    } 

    /** 
    * Set userModified 
    * 
    * @param \DateTime $userModified 
    * @return Users 
    */ 
    public function setUserModified($userModified) 
    { 
     $this->userModified = $userModified; 

     return $this; 
    } 

    /** 
    * Get userModified 
    * 
    * @return \DateTime 
    */ 
    public function getUserModified() 
    { 
     return $this->userModified; 
    } 

    /** 
    * Set userDeleted 
    * 
    * @param \DateTime $userDeleted 
    * @return Users 
    */ 
    public function setUserDeleted($userDeleted) 
    { 
     $this->userDeleted = $userDeleted; 

     return $this; 
    } 

    /** 
    * Get userDeleted 
    * 
    * @return \DateTime 
    */ 
    public function getUserDeleted() 
    { 
     return $this->userDeleted; 
    } 

    /** 
    * Set userLastlogin 
    * 
    * @param \DateTime $userLastlogin 
    * @return Users 
    */ 
    public function setUserLastlogin($userLastlogin) 
    { 
     $this->userLastlogin = $userLastlogin; 

     return $this; 
    } 

    /** 
    * Get userLastlogin 
    * 
    * @return \DateTime 
    */ 
    public function getUserLastlogin() 
    { 
     return $this->userLastlogin; 
    } 

    /** 
    * Set userConfirmed 
    * 
    * @param \DateTime $userConfirmed 
    * @return Users 
    */ 
    public function setUserConfirmed($userConfirmed) 
    { 
     $this->userConfirmed = $userConfirmed; 

     return $this; 
    } 

    /** 
    * Get userConfirmed 
    * 
    * @return \DateTime 
    */ 
    public function getUserConfirmed() 
    { 
     return $this->userConfirmed; 
    } 

    /** 
    * Set userLocked 
    * 
    * @param \DateTime $userLocked 
    * @return Users 
    */ 
    public function setUserLocked($userLocked) 
    { 
     $this->userLocked = $userLocked; 

     return $this; 
    } 

    /** 
    * Get userLocked 
    * 
    * @return \DateTime 
    */ 
    public function getUserLocked() 
    { 
     return $this->userLocked; 
    } 

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

    /** 
    * Set role 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Roles $role 
    * @return Users 
    */ 
    public function setRole(\VolleyScout\VolleyScoutBundle\Entity\Roles $role = null) 
    { 
     $this->role = $role; 

     return $this; 
    } 

    /** 
    * Get role 
    * 
    * @return \VolleyScout\VolleyScoutBundle\Entity\Roles 
    */ 
    public function getRole() 
    { 
     return $this->role; 
    } 

    /** 
    * Add team 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Teams $team 
    * @return Users 
    */ 
    public function addTeam(\VolleyScout\VolleyScoutBundle\Entity\Teams $team) 
    { 
     $this->team[] = $team; 

     return $this; 
    } 

    /** 
    * Remove team 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Teams $team 
    */ 
    public function removeTeam(\VolleyScout\VolleyScoutBundle\Entity\Teams $team) 
    { 
     $this->team->removeElement($team); 
    } 

    /** 
    * Get team 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getTeam() 
    { 
     return $this->team; 
    } 

    /** 
    * Add competition 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Competitions $competition 
    * @return Users 
    */ 
    public function addCompetition(\VolleyScout\VolleyScoutBundle\Entity\Competitions $competition) 
    { 
     $this->competition[] = $competition; 

     return $this; 
    } 

    /** 
    * Remove competition 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Competitions $competition 
    */ 
    public function removeCompetition(\VolleyScout\VolleyScoutBundle\Entity\Competitions $competition) 
    { 
     $this->competition->removeElement($competition); 
    } 

    /** 
    * Get competition 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getCompetition() 
    { 
     return $this->competition; 
    } 
} 

玩家實體類:

/** 
* Players 
* 
* @ORM\Table(name="players", indexes={@ORM\Index(name="fk_players_users1_idx", columns={"user_id"}), @ORM\Index(name="fk_players_teams1_idx", columns={"team_id"}), @ORM\Index(name="fk_players_myteam1_idx", columns={"myteam_id"})}) 
* @ORM\Entity 
*/ 
class Players 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="player_name", type="string", length=255, nullable=false) 
    */ 
    private $playerName; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="player_licensenumber", type="string", length=45, nullable=false) 
    */ 
    private $playerLicensenumber; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="player_position", type="string", nullable=false) 
    */ 
    private $playerPosition; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="player_birthyear", type="datetime", nullable=true) 
    */ 
    private $playerBirthyear; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="player_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $playerId; 

    /** 
    * @var \VolleyScout\VolleyScoutBundle\Entity\Myteam 
    * 
    * @ORM\ManyToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Myteam") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="myteam_id", referencedColumnName="myteam_id") 
    * }) 
    */ 
    private $myteam; 

    /** 
    * @var \VolleyScout\VolleyScoutBundle\Entity\Teams 
    * 
    * @ORM\ManyToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Teams") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="team_id", referencedColumnName="team_id") 
    * }) 
    */ 
    private $team; 

    /** 
    * @var \VolleyScout\VolleyScoutBundle\Entity\Users 
    * 
    * @ORM\ManyToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Users") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") 
    * }) 
    */ 
    private $user; 



    /** 
    * Set playerName 
    * 
    * @param string $playerName 
    * @return Players 
    */ 
    public function setPlayerName($playerName) 
    { 
     $this->playerName = $playerName; 

     return $this; 
    } 

    /** 
    * Get playerName 
    * 
    * @return string 
    */ 
    public function getPlayerName() 
    { 
     return $this->playerName; 
    } 

    /** 
    * Set playerLicensenumber 
    * 
    * @param string $playerLicensenumber 
    * @return Players 
    */ 
    public function setPlayerLicensenumber($playerLicensenumber) 
    { 
     $this->playerLicensenumber = $playerLicensenumber; 

     return $this; 
    } 

    /** 
    * Get playerLicensenumber 
    * 
    * @return string 
    */ 
    public function getPlayerLicensenumber() 
    { 
     return $this->playerLicensenumber; 
    } 

    /** 
    * Set playerPosition 
    * 
    * @param string $playerPosition 
    * @return Players 
    */ 
    public function setPlayerPosition($playerPosition) 
    { 
     $this->playerPosition = $playerPosition; 

     return $this; 
    } 

    /** 
    * Get playerPosition 
    * 
    * @return string 
    */ 
    public function getPlayerPosition() 
    { 
     return $this->playerPosition; 
    } 

    /** 
    * Set playerBirthyear 
    * 
    * @param \DateTime $playerBirthyear 
    * @return Players 
    */ 
    public function setPlayerBirthyear($playerBirthyear) 
    { 
     $this->playerBirthyear = $playerBirthyear; 

     return $this; 
    } 

    /** 
    * Get playerBirthyear 
    * 
    * @return \DateTime 
    */ 
    public function getPlayerBirthyear() 
    { 
     return $this->playerBirthyear; 
    } 

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

    /** 
    * Set myteam 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Myteam $myteam 
    * @return Players 
    */ 
    public function setMyteam(\VolleyScout\VolleyScoutBundle\Entity\Myteam $myteam = null) 
    { 
     $this->myteam = $myteam; 

     return $this; 
    } 

    /** 
    * Get myteam 
    * 
    * @return \VolleyScout\VolleyScoutBundle\Entity\Myteam 
    */ 
    public function getMyteam() 
    { 
     return $this->myteam; 
    } 

    /** 
    * Set team 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Teams $team 
    * @return Players 
    */ 
    public function setTeam(\VolleyScout\VolleyScoutBundle\Entity\Teams $team = null) 
    { 
     $this->team = $team; 

     return $this; 
    } 

    /** 
    * Get team 
    * 
    * @return \VolleyScout\VolleyScoutBundle\Entity\Teams 
    */ 
    public function getTeam() 
    { 
     return $this->team; 
    } 

    /** 
    * Set user 
    * 
    * @param \VolleyScout\VolleyScoutBundle\Entity\Users $user 
    * @return Players 
    */ 
    public function setUser(\VolleyScout\VolleyScoutBundle\Entity\Users $user = null) 
    { 
     $this->user = $user; 

     return $this; 
    } 

    /** 
    * Get user 
    * 
    * @return \VolleyScout\VolleyScoutBundle\Entity\Users 
    */ 
    public function getUser() 
    { 
     return $this->user; 
    } 
} 

當我嘗試添加一個播放器領域我得到這個錯誤:

Neither the property "player" nor one of the methods "getPlayer()", "isPlayer()", "hasPlayer()", "__get()" exist and have public access in class "VolleyScout\VolleyScoutBundle\Entity\Users". 

更新2:
而且我的球員表'team_id'中也有一個FK。所以當我創建一個用戶時,我想也選擇一個團隊。所以我想要的是來自數據庫中所有團隊的列表,並且在我的表單中將其設置爲選擇字段類型。你知道我可以如何將它放在我的表單中嗎?

更新3:

我已經添加了以下到我的用戶實體類:

private $player; 

/** 
* Get player 
* 
* @return \VolleyScout\VolleyScoutBundle\Entity\Players 
*/ 
public function getPlayer() { 
    return $this->player; 
} 
/** 
* Set player 
* 
* @param \VolleyScout\VolleyScoutBundle\Entity\Players $player 
* @return Users 
*/ 
public function setPlayer(\VolleyScout\VolleyScoutBundle\Entity\Players $player){ 
    $this->player = $player; 
} 

在我formtype我說:

->add('player') 

現在我的表單我想要執行以下操作:

{{ form_label(registerForm.player.playerLicensenumber, label|default(), 

因爲在我的球員實體類我有playerLicensenumber但我總是得到這個錯誤:

Method "playerLicensenumber" for object "Symfony\Component\Form\FormView" does not exist in VolleyScoutBundle:User:register.html.twig at line 57 

UPDATE 4:
這是一個很好的解決方案:
將此添加到我的註冊表格:

->add('player', new PlayerType()) 

而在我的playertype中,我有來自玩家表的字段。

+0

您可以發佈實體的代碼示例嗎? – devict

+0

我更新了我的開始帖子! – nielsv

+0

因此,您的用戶註冊並可以選擇表單中的播放器?嘗試只添加一個'player'字段:「 - > add('player') – devict

回答

1

您必須爲您的用戶實體中的「玩家」字段添加setter和getter。

public function getPlayer() { 
    return $this->player; 
} 

public function setPlayer(\Path\to\player\entity $player){ 
    $this->player = $player; 
} 

對於表單中的團隊列表,您必須添加一個「實體」字段類型。以下是有關更多信息的文檔:http://symfony.com/doc/current/reference/forms/types/entity.html

+0

感謝您的幫助!我更新了我的開始帖子,您是否知道該解決方案? – nielsv

+0

我更新了答案 – devict

+0

謝謝!我的第一個問題仍然存在問題。更新我的開始帖子。 – nielsv

相關問題