Catchable Fatal Error: Argument 1 passé à ... doit être une instance de ..., tableau donné
Je veux enregistrer un utilisateur. Dans ma base de données j'ai une table user
avec un FK player_id
et à mes joueurs de la table j'ai un FK team_id
de mon équipe de la table.
C'est mon RegisterType Forme:
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';
}
}
Comme vous pouvez le voir, j'ai ajouté un lien vers une autre forme de "PlayerType'. C'est mon PlayerType Forme:
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';
}
}
Et dans mon registre.html.brindille de vue que j'ai tous mes champs d'utilisateur d'un de mes joueur de champs comme ceci:
<div class="form-group{{ registerForm.player.playerLicensenumber.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.player.playerLicensenumber, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.player.playerLicensenumber,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.player.playerLicensenumber.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.player.playerLicensenumber) }}
</div>
{% endif %}
</div>
<div class="form-group{{ registerForm.player.playerBirthyear.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.player.playerBirthyear, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.player.playerBirthyear,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.player.playerBirthyear.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.player.playerBirthyear) }}
</div>
{% endif %}
</div>
<div class="form-group{{ registerForm.player.playerPosition.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.player.playerPosition, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.player.playerPosition,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.player.playerPosition.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.player.playerPosition) }}
</div>
{% endif %}
</div>
<div class="form-group{{ registerForm.player.team.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.player.team, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.player.team,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.player.team.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.player.team) }}
</div>
{% endif %}
</div>
C'est mon Utilisateurs de la Classe d'Entité:
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;
}
}
Et mes Joueurs de Classe d'Entité:
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;
}
}
Mon problème est que maintenant, quand je veux envoyer j'obtiens l'erreur suivante:
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
Mise à JOUR:
L'609 règle est: est-ce
public function setPlayer(\VolleyScout\VolleyScoutBundle\Entity\Players $player){
$this->player = $player;
}
Règle 359, 360 en PropertyAccessor.php
if ($reflClass->hasMethod($setter) && $reflClass->getMethod($setter)->isPublic()) {
$object->$setter($value);
Règle ajoutée pour commencer la poste (mise à jour)
En fait, le plus important est la ligne 360 de PropertyAccessor.php.
Ajouté ça à commencer à poster
Qu'est-ce que dans
$object
? Le message d'erreur dit que c'est un tableau. Si c'est un tableau d'objets, vous devez appeler $setter
dans une boucle.
OriginalL'auteur nielsv | 2014-01-10
Vous devez vous connecter pour publier un commentaire.
Prenons cette erreur en dehors de sorte que vous pouvez voir comment comprendre les messages d'erreur.
C'est le type de l'erreur. Vous pouvez écrire un gestionnaire d'erreur pour gérer ces.
Cela signifie que lorsque les Utilisateurs: setPlayer() est appelée, vous devez appeler à l'aide d'un objet de Joueur dans l'argument.
Cela signifie qu'au lieu d'un Joueur de l'objet, il y a un tableau en argument.
Cela vous indique où est le problème: la ligne 360 de PropertyAccessor.php.
Cela vous indique quelle ligne de la catégorie des Utilisateurs est impliqué.
Donc, tout ce que vous avez à faire est de changer la pile sur la ligne 360 à un Joueur de l'objet. Ensuite, vous pouvez passer à la prochaine erreur.
EDIT:
Parce que la ligne 360 est appelé à partir d'un autre endroit, vous aurez à tracer vers l'arrière pour ce qui était de l'appel de la ligne 360. Dans ce cas, c'est cette ligne qui vous offre une question:
La
$value
est censé être un Joueur de l'objet, pas un tableau. Où est$value
en venir?OriginalL'auteur miyasudokoro
Eu ce problème et il m'ont rendu fou.
Une fois que j'ai correctement ajouté cette méthode dans la classe
PlayerType
s'étend Type Abstrait:Qu'il serait de savoir que le tableau doit être utilisé à la bonne classe. Et cela a fonctionné.
OriginalL'auteur Hans Blix