Abfangbaren Fatal Error: Argument 1 passed zu ... muss eine Instanz von ..., array gegeben
Ich möchte mich registrieren eines Benutzers. In meiner Datenbank habe ich eine Tabelle user
mit einem FK player_id
und in meinem Spieler-Tabelle habe ich ein FK team_id
aus meinem team Tabelle.
Dies ist mein RegisterType Form:
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';
}
}
Wie Sie sehen können habe ich einen link zu einer anderen form 'PlayerType'. Dies ist mein PlayerType Form:
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';
}
}
Und in meinem register.html-Code.Zweig anzeigen, ich habe alle meine Benutzer-Felder ein "mein Spieler" - Felder wie diese:
<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>
Dies ist mein Benutzer Entity-Klasse:
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;
}
}
- Und mein-Spieler-Entity-Klasse:
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;
}
}
Mein problem ist jetzt, wenn ich senden will bekomme ich folgende Fehlermeldung:
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
UPDATE:
Den 609 Regel ist diese:
public function setPlayer(\VolleyScout\VolleyScoutBundle\Entity\Players $player){
$this->player = $player;
}
Regel 359, 360 in PropertyAccessor.php
if ($reflClass->hasMethod($setter) && $reflClass->getMethod($setter)->isPublic()) {
$object->$setter($value);
- Die Linie 360?
- Zusätzliche Regel zu beginnen, post (update)
- Tatsächlich, die weitere wichtige Linie ist die Linie 360 PropertyAccessor.php.
- Hinzugefügt zu beginnen, post
- Was ist in
$object
? Die Fehlermeldung sagt, es ist ein array. Wenn dies ist ein array von Objekten, die Sie anrufen$setter
in einer Schleife. - Zu formulieren Barmar die Frage, müssen wir den code, der festlegt
$value
und sehen Sie, warum$value
ist ein array statt einem Player-Objekt. - BTW ist es "Liebhaber", nicht "begeistert"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehmen wir diesen Fehler auseinander, so dass Sie sehen können, wie um herauszufinden, Fehlermeldungen.
Dies ist die Art des Fehlers. Sie können schreiben, einen Fehler-handler zu behandeln.
Dies bedeutet, dass wenn Benutzer::setPlayer() aufgerufen wird, Sie zu nennen mit einem Spieler-Objekt als argument.
Dies bedeutet, dass statt ein Player-Objekt, es war ein array als argument.
Dieser erzählt Ihnen, wo das problem ist: - Linie 360 PropertyAccessor.php.
Dieser sagt Ihnen, welche Zeile der Klasse Benutzer beteiligt ist.
Also, alle Sie tun müssen ist, ändern Sie das array in Zeile 360 zu einem Player-Objekt. Dann können Sie gehen Sie zum nächsten Fehler.
EDIT:
Da die Linie 360 wird genannt von woanders, müssen Sie die Spur rückwärts auf das, was war calling line 360. In diesem Fall, es ist diese Linie, die mit einem Problem:
Den
$value
soll ein Player-Objekt, kein array. Wo ist$value
aus?Hatte dieses problem und es fuhr mich verrückt.
Sobald ich richtig Hinzugefügt, diese Methode in der Klasse
PlayerType
erstreckt Abstrakten Typ:Er würde wissen, dass das array sollte gegossen werden, um die richtige Klasse. Und es hat funktioniert.