可捕获的致命错误:传递给...的参数1必须是...,给定数组的实例

时间:2014-01-10 19:02:11

标签: php arrays symfony doctrine entity

我想注册一个用户。在我的数据库中,我有一个表user,其中包含一个FK player_id,在我的玩家表中,我的团队表中有一个FK team_id

这是我的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视图中,我的所有用户字段都是我的播放器字段,如下所示:

<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>

这是我的用户实体类:

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);

2 个答案:

答案 0 :(得分:11)

让我们将此错误分开,以便您可以了解如何找出错误消息。

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应该是一个Player对象,而不是一个数组。 $value来自哪里?

答案 1 :(得分:0)

有这个问题,它让我疯了。

一旦我在类PlayerType中正确添加了此方法,就会扩展抽象类型:

/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Player'
    ));
}

它会知道数组应该被转换为正确的类。它起作用了。