我想注册一个用户.在我的数据库中,我有一个user
带有FK 的表,player_id
在我的玩家表中team_id
,我的团队表中有一个FK .
这是我的RegisterType表单:
class RegisterType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $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', new PlayerType()) ->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', ]) ; } /** * @return string */ public function getName() { return 'register'; } }
正如您所看到的,我添加了另一个表单'PlayerType'的链接.这是我的PlayerType表单:
class PlayerType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('playerLicensenumber', 'text', [ 'label' => 'Your License number*', 'attr' => ['placeholder' => 'Enter your license number.'], ]) ->add('playerPosition', 'choice', array( 'choices' => array('T' => 'Trainer', 'S' => 'Spelverdeler', 'R' => 'Receptie/Hoek', 'L' => 'Libero', 'M' => 'Midden', 'O' => 'Opposite', 'A' => 'All-round'), 'label' => 'Position you play at*', 'attr' => array('placeholder' => 'Enter your play position.') )) ->add('playerBirthyear', 'text', array( 'label' => 'Your Birth Year', 'attr' => ['placeholder' => 'Enter your birth year.'], 'required' => false )) ->add('team', 'text', array( 'label' => 'You play with*', 'attr' => ['placeholder' => 'Enter your team.'] )) ; } /** * @return string */ public function getName() { return 'player'; } }
在我的register.html.twig视图中,我的所有用户字段都是我的播放器字段,如下所示:
{{ form_label(registerForm.player.playerLicensenumber, label|default(), { "label_attr": { "class": "col-sm-3 control-label"}}) }}{{ form_widget(registerForm.player.playerLicensenumber, {"attr": {"class": "form-control"} }) }}{% if not registerForm.player.playerLicensenumber.vars.valid %}{% endif %}Please fix:
{{ form_errors(registerForm.player.playerLicensenumber) }}{{ form_label(registerForm.player.playerBirthyear, label|default(), { "label_attr": { "class": "col-sm-3 control-label"}}) }}{{ form_widget(registerForm.player.playerBirthyear, {"attr": {"class": "form-control"} }) }}{% if not registerForm.player.playerBirthyear.vars.valid %}{% endif %}Please fix:
{{ form_errors(registerForm.player.playerBirthyear) }}{{ form_label(registerForm.player.playerPosition, label|default(), { "label_attr": { "class": "col-sm-3 control-label"}}) }}{{ form_widget(registerForm.player.playerPosition, {"attr": {"class": "form-control"} }) }}{% if not registerForm.player.playerPosition.vars.valid %}{% endif %}Please fix:
{{ form_errors(registerForm.player.playerPosition) }}{{ form_label(registerForm.player.team, label|default(), { "label_attr": { "class": "col-sm-3 control-label"}}) }}{{ form_widget(registerForm.player.team, {"attr": {"class": "form-control"} }) }}{% if not registerForm.player.team.vars.valid %}{% endif %}Please fix:
{{ form_errors(registerForm.player.team) }}
这是我的用户实体类:
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; } 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; } }
和我的玩家实体班:
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; } }
我现在的问题是,当我想提交时,我收到以下错误:
ContextErrorException: Catchable Fatal Error: Argument 1 passed to VolleyScout\VolleyScoutBundle\Entity\Users::setPlayer() must be an instance of VolleyScout\VolleyScoutBundle\Entity\Players, array given, called in /Applications/mampstack-5.4.20-0/apache2/htdocs/volleyscout/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php on line 360 and defined in /Applications/mampstack-5.4.20-0/apache2/htdocs/volleyscout/src/VolleyScout/VolleyScoutBundle/Entity/Users.php line 609
更新:
609规则是这样的:
public function setPlayer(\VolleyScout\VolleyScoutBundle\Entity\Players $player){ $this->player = $player; }
PropertyAccessor.php中的规则359,360
if ($reflClass->hasMethod($setter) && $reflClass->getMethod($setter)->isPublic()) { $object->$setter($value);
miyasudokoro.. 12
让我们将此错误分开,以便您可以看到如何找出错误消息.
ContextErrorException: Catchable Fatal Error:
这是错误的类型.您可以编写错误处理程序来处理这些问题.
Argument 1 passed to VolleyScout\VolleyScoutBundle\Entity\Users::setPlayer() must be an instance of VolleyScout\VolleyScoutBundle\Entity\Players,
这意味着当调用Users :: setPlayer()时,您必须使用参数中的Player对象来调用它.
array given,
这意味着在参数中有一个数组而不是Player对象.
called in /Applications/mampstack-5.4.20-0/apache2/htdocs/volleyscout/vendor /symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php on line 360
这告诉您问题出在哪里:PropertyAccessor.php的第360行.
and defined in /Applications/mampstack-5.4.20-0/apache2/htdocs/volleyscout /src/VolleyScout/VolleyScoutBundle/Entity/Users.php line 609
这告诉您涉及用户类的哪一行.
因此,您所要做的就是将第360行的数组更改为Player对象.然后你可以继续下一个错误.
编辑:
因为第360行是从其他地方调用的,所以你必须向后追溯到调用第360行的任何东西.在这种情况下,这条线路会给你一个问题:
$object->$setter($value);
将$value
被认为是一个播放器对象,而不是阵列.$value
来自哪里?
让我们将此错误分开,以便您可以看到如何找出错误消息.
ContextErrorException: Catchable Fatal Error:
这是错误的类型.您可以编写错误处理程序来处理这些问题.
Argument 1 passed to VolleyScout\VolleyScoutBundle\Entity\Users::setPlayer() must be an instance of VolleyScout\VolleyScoutBundle\Entity\Players,
这意味着当调用Users :: setPlayer()时,您必须使用参数中的Player对象来调用它.
array given,
这意味着在参数中有一个数组而不是Player对象.
called in /Applications/mampstack-5.4.20-0/apache2/htdocs/volleyscout/vendor /symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php on line 360
这告诉您问题出在哪里:PropertyAccessor.php的第360行.
and defined in /Applications/mampstack-5.4.20-0/apache2/htdocs/volleyscout /src/VolleyScout/VolleyScoutBundle/Entity/Users.php line 609
这告诉您涉及用户类的哪一行.
因此,您所要做的就是将第360行的数组更改为Player对象.然后你可以继续下一个错误.
编辑:
因为第360行是从其他地方调用的,所以你必须向后追溯到调用第360行的任何东西.在这种情况下,这条线路会给你一个问题:
$object->$setter($value);
将$value
被认为是一个播放器对象,而不是阵列.$value
来自哪里?