将其他表中的数据添加到表单+Symfony2中



我有一个表users,里面有不同的字段。我还有一个表播放器,里面有一个FK user_id(以及其他字段)。

现在我有一个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添加到我的表单中,但没有成功。

更新:
我的用户实体类:

/**
* Users
*
* @ORMTable(name="users", indexes={@ORMIndex(name="fk_users_roles1_idx", columns={"role_id"})})
* @ORMEntity
*/
class Users
{
/**
* @var string
*
* @ORMColumn(name="user_username", type="string", length=45, nullable=false)
*/
private $userUsername;
/**
* @var string
*
* @ORMColumn(name="user_firstname", type="string", length=45, nullable=false)
*/
private $userFirstname;
/**
* @var string
*
* @ORMColumn(name="user_surname", type="string", length=255, nullable=false)
*/
private $userSurname;
/**
* @var string
*
* @ORMColumn(name="user_email", type="string", length=255, nullable=false)
*/
private $userEmail;
/**
* @var string
*
* @ORMColumn(name="user_type", type="string", nullable=false)
*/
private $userType;
/**
* @var string
*
* @ORMColumn(name="user_password", type="string", length=60, nullable=false)
*/
private $userPassword;
/**
* @var string
*
* @ORMColumn(name="user_salt", type="string", length=30, nullable=false)
*/
private $userSalt;
/**
* @var string
*
* @ORMColumn(name="user_token", type="string", length=45, nullable=true)
*/
private $userToken;
/**
* @var DateTime
*
* @ORMColumn(name="user_created", type="datetime", nullable=false)
*/
private $userCreated;
/**
* @var DateTime
*
* @ORMColumn(name="user_modified", type="datetime", nullable=true)
*/
private $userModified;
/**
* @var DateTime
*
* @ORMColumn(name="user_deleted", type="datetime", nullable=true)
*/
private $userDeleted;
/**
* @var DateTime
*
* @ORMColumn(name="user_lastlogin", type="datetime", nullable=true)
*/
private $userLastlogin;
/**
* @var DateTime
*
* @ORMColumn(name="user_confirmed", type="datetime", nullable=true)
*/
private $userConfirmed;
/**
* @var DateTime
*
* @ORMColumn(name="user_locked", type="datetime", nullable=true)
*/
private $userLocked;
/**
* @var integer
*
* @ORMColumn(name="user_id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="IDENTITY")
*/
private $userId;
/**
* @var VolleyScoutVolleyScoutBundleEntityRoles
*
* @ORMManyToOne(targetEntity="VolleyScoutVolleyScoutBundleEntityRoles")
* @ORMJoinColumns({
*   @ORMJoinColumn(name="role_id", referencedColumnName="role_id")
* })
*/
private $role;
/**
* @var DoctrineCommonCollectionsCollection
*
* @ORMManyToMany(targetEntity="VolleyScoutVolleyScoutBundleEntityTeams", inversedBy="user")
* @ORMJoinTable(name="user_follows_teams",
*   joinColumns={
*     @ORMJoinColumn(name="user_id", referencedColumnName="user_id")
*   },
*   inverseJoinColumns={
*     @ORMJoinColumn(name="team_id", referencedColumnName="team_id")
*   }
* )
*/
private $team;
/**
* @var DoctrineCommonCollectionsCollection
*
* @ORMManyToMany(targetEntity="VolleyScoutVolleyScoutBundleEntityCompetitions", inversedBy="user")
* @ORMJoinTable(name="user_follows_competitions",
*   joinColumns={
*     @ORMJoinColumn(name="user_id", referencedColumnName="user_id")
*   },
*   inverseJoinColumns={
*     @ORMJoinColumn(name="competition_id", referencedColumnName="competition_id")
*   }
* )
*/
private $competition;
/**
* Constructor
*/
public function __construct()
{
$this->team = new DoctrineCommonCollectionsArrayCollection();
$this->competition = new DoctrineCommonCollectionsArrayCollection();
}

/**
* 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 VolleyScoutVolleyScoutBundleEntityRoles $role
* @return Users
*/
public function setRole(VolleyScoutVolleyScoutBundleEntityRoles $role = null)
{
$this->role = $role;
return $this;
}
/**
* Get role
*
* @return VolleyScoutVolleyScoutBundleEntityRoles 
*/
public function getRole()
{
return $this->role;
}
/**
* Add team
*
* @param VolleyScoutVolleyScoutBundleEntityTeams $team
* @return Users
*/
public function addTeam(VolleyScoutVolleyScoutBundleEntityTeams $team)
{
$this->team[] = $team;
return $this;
}
/**
* Remove team
*
* @param VolleyScoutVolleyScoutBundleEntityTeams $team
*/
public function removeTeam(VolleyScoutVolleyScoutBundleEntityTeams $team)
{
$this->team->removeElement($team);
}
/**
* Get team
*
* @return DoctrineCommonCollectionsCollection 
*/
public function getTeam()
{
return $this->team;
}
/**
* Add competition
*
* @param VolleyScoutVolleyScoutBundleEntityCompetitions $competition
* @return Users
*/
public function addCompetition(VolleyScoutVolleyScoutBundleEntityCompetitions $competition)
{
$this->competition[] = $competition;
return $this;
}
/**
* Remove competition
*
* @param VolleyScoutVolleyScoutBundleEntityCompetitions $competition
*/
public function removeCompetition(VolleyScoutVolleyScoutBundleEntityCompetitions $competition)
{
$this->competition->removeElement($competition);
}
/**
* Get competition
*
* @return DoctrineCommonCollectionsCollection 
*/
public function getCompetition()
{
return $this->competition;
}
}

我的玩家实体类:

/**
* Players
*
* @ORMTable(name="players", indexes={@ORMIndex(name="fk_players_users1_idx", columns={"user_id"}), @ORMIndex(name="fk_players_teams1_idx", columns={"team_id"}), @ORMIndex(name="fk_players_myteam1_idx", columns={"myteam_id"})})
* @ORMEntity
*/
class Players
{
/**
* @var string
*
* @ORMColumn(name="player_name", type="string", length=255, nullable=false)
*/
private $playerName;
/**
* @var string
*
* @ORMColumn(name="player_licensenumber", type="string", length=45, nullable=false)
*/
private $playerLicensenumber;
/**
* @var string
*
* @ORMColumn(name="player_position", type="string", nullable=false)
*/
private $playerPosition;
/**
* @var DateTime
*
* @ORMColumn(name="player_birthyear", type="datetime", nullable=true)
*/
private $playerBirthyear;
/**
* @var integer
*
* @ORMColumn(name="player_id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="IDENTITY")
*/
private $playerId;
/**
* @var VolleyScoutVolleyScoutBundleEntityMyteam
*
* @ORMManyToOne(targetEntity="VolleyScoutVolleyScoutBundleEntityMyteam")
* @ORMJoinColumns({
*   @ORMJoinColumn(name="myteam_id", referencedColumnName="myteam_id")
* })
*/
private $myteam;
/**
* @var VolleyScoutVolleyScoutBundleEntityTeams
*
* @ORMManyToOne(targetEntity="VolleyScoutVolleyScoutBundleEntityTeams")
* @ORMJoinColumns({
*   @ORMJoinColumn(name="team_id", referencedColumnName="team_id")
* })
*/
private $team;
/**
* @var VolleyScoutVolleyScoutBundleEntityUsers
*
* @ORMManyToOne(targetEntity="VolleyScoutVolleyScoutBundleEntityUsers")
* @ORMJoinColumns({
*   @ORMJoinColumn(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 VolleyScoutVolleyScoutBundleEntityMyteam $myteam
* @return Players
*/
public function setMyteam(VolleyScoutVolleyScoutBundleEntityMyteam $myteam = null)
{
$this->myteam = $myteam;
return $this;
}
/**
* Get myteam
*
* @return VolleyScoutVolleyScoutBundleEntityMyteam 
*/
public function getMyteam()
{
return $this->myteam;
}
/**
* Set team
*
* @param VolleyScoutVolleyScoutBundleEntityTeams $team
* @return Players
*/
public function setTeam(VolleyScoutVolleyScoutBundleEntityTeams $team = null)
{
$this->team = $team;
return $this;
}
/**
* Get team
*
* @return VolleyScoutVolleyScoutBundleEntityTeams 
*/
public function getTeam()
{
return $this->team;
}
/**
* Set user
*
* @param VolleyScoutVolleyScoutBundleEntityUsers $user
* @return Players
*/
public function setUser(VolleyScoutVolleyScoutBundleEntityUsers $user = null)
{
$this->user = $user;
return $this;
}
/**
* Get user
*
* @return VolleyScoutVolleyScoutBundleEntityUsers 
*/
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 "VolleyScoutVolleyScoutBundleEntityUsers".

更新2:
我的玩家表'team_id'中还有一个FK。因此,当我创建一个用户时,我也想选择一个团队。所以我想要的是数据库中所有团队的列表,并将其设置为表单中的选择字段类型。你知道我如何将其放置在表单类型中吗?

更新3:

我已经将以下内容添加到我的用户实体类中:

private $player;
/**
* Get player
*
* @return VolleyScoutVolleyScoutBundleEntityPlayers
*/
public function getPlayer() {
return $this->player;
}
/**
* Set player
*
* @param VolleyScoutVolleyScoutBundleEntityPlayers $player
* @return Users
*/
public function setPlayer(VolleyScoutVolleyScoutBundleEntityPlayers $player){
$this->player = $player;
}

在我的表单类型中,我添加了:

->add('player')

现在,在我的表格中,我想做以下事情:

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

因为在我的Players实体类中,我有playerLicensenumber,但我总是收到这个错误:

Method "playerLicensenumber" for object "SymfonyComponentFormFormView" does not exist in VolleyScoutBundle:User:register.html.twig at line 57

更新4:
这是一个好的解决方案吗:
将此添加到我的注册表单中:

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

在我的球员类型中,我有球员表中的字段。

您必须为User实体中的"player"字段添加一个setter和一个getter。

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

对于表单中的团队列表,您必须添加一个"实体"字段类型。以下是获取更多信息的文档:http://symfony.com/doc/current/reference/forms/types/entity.html

最新更新