2

自動生成されたフォームを使用して新しい UserProfile を追加しようとすると、次のエラーが発生します。エラーは次のとおりです: オブジェクトが必要ですが、コレクションを取得しました。エンティティ フィールドに "multiple=true" を渡すのを忘れていませんか?

Symfony 2.0.12を使用しています

これは、UserProfile エンティティの私のコードです。コントローラで問題が発生しましたが、解決方法がわかりません。助けてください。

<?php

namespace Infidia\OutsourceBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Infidia\OutsourceBundle\Entity\UserProfile
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Infidia\OutsourceBundle\Entity\UserProfileRepository")
 */
class UserProfile
{
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 *
 * @ORM\OneToOne(targetEntity="User")
 * @orm:JoinColumn(name="userid", referencedColumnName="id")
 */
private $user;

/**
 * @var  integer $userid
 */
private $userid;

/**
 * @var text $street_address
 *
 * @ORM\Column(name="street_address", type="text")
 */
private $street_address;

/**
 * @var string $city
 *
 * @ORM\Column(name="city", type="string", length=255)
 */
private $city;

/**
 * @var string $country
 *
 * @ORM\Column(name="country", type="string", length=255)
 */
private $country;

/**
 * @var string $zipcode
 *
 * @ORM\Column(name="zipcode", type="string", length=255)
 */
private $zipcode;

/**
 * @var string $timezone
 *
 * @ORM\Column(name="timezone", type="string", length=12)
 */
private $timezone;

/**
 * @var string $contact_no
 *
 * @ORM\Column(name="contact_no", type="string", length=20)
 */
private $contact_no;

/**
 * @var date $birthday
 *
 * @ORM\Column(name="birthday", type="date")
 */
private $birthday;

/**
 * @var string $gender
 *
 * @ORM\Column(name="gender", type="string", length=15)
 */
private $gender;


/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}


/**
 * Set street_address
 *
 * @param text $streetAddress
 */
public function setStreetAddress($streetAddress)
{
    $this->street_address = $streetAddress;
}

/**
 * Get street_address
 *
 * @return text 
 */
public function getStreetAddress()
{
    return $this->street_address;
}

/**
 * Set city
 *
 * @param string $city
 */
public function setCity($city)
{
    $this->city = $city;
}

/**
 * Get city
 *
 * @return string 
 */
public function getCity()
{
    return $this->city;
}

/**
 * Set country
 *
 * @param string $country
 */
public function setCountry($country)
{
    $this->country = $country;
}

/**
 * Get country
 *
 * @return string 
 */
public function getCountry()
{
    return $this->country;
}

/**
 * Set zipcode
 *
 * @param string $zipcode
 */
public function setZipcode($zipcode)
{
    $this->zipcode = $zipcode;
}

/**
 * Get zipcode
 *
 * @return string 
 */
public function getZipcode()
{
    return $this->zipcode;
}

/**
 * Set timezone
 *
 * @param string $timezone
 */
public function setTimezone($timezone)
{
    $this->timezone = $timezone;
}

/**
 * Get timezone
 *
 * @return string 
 */
public function getTimezone()
{
    return $this->timezone;
}

/**
 * Set contact_no
 *
 * @param string $contactNo
 */
public function setContactNo($contactNo)
{
    $this->contact_no = $contactNo;
}

/**
 * Get contact_no
 *
 * @return string 
 */
public function getContactNo()
{
    return $this->contact_no;
}

/**
 * Set birthday
 *
 * @param date $birthday
 */
public function setBirthday($birthday)
{
    $this->birthday = $birthday;
}

/**
 * Get birthday
 *
 * @return date 
 */
public function getBirthday()
{
    return $this->birthday;
}

/**
 * Set gender
 *
 * @param string $gender
 */
public function setGender($gender)
{
    $this->gender = $gender;
}

/**
 * Get gender
 *
 * @return string 
 */
public function getGender()
{
    return $this->gender;
}

/**
 * Set experience
 *
 * @param \Infidia\OutsourceBundle\Entity\text $experience
 */
public function setExperience($experience)
{
    $this->experience = $experience;
}

/**
 * Get Experience
 *
 * @return \Infidia\OutsourceBundle\Entity\text
 */
public function getExperience()
{
    return $this->experience;
}

/**
 * Set UserId
 *
 * @param int $userid
 */
public function setUserid($userid)
{
    $this->userid = $userid;
}

/**
 * Get UserId
 * @return int
 */
public function getUserid()
{
    return $this->userid;
}

public function __construct()
{
    $this->user = new ArrayCollection();
}

/**
 * Set user
 *
 * @param Infidia\OutsourceBundle\Entity\User $user
 */
public function setUser(\Infidia\OutsourceBundle\Entity\User $user)
{
    $this->user = $user;
}

/**
 * Get user
 *
 * @return Infidia\OutsourceBundle\Entity\User 
 */
public function getUser()
{
    return $this->user;
}
}
4

2 に答える 2

3

問題はあなたの形にあります...これを試してください。

 public function buildForm(FormBuilder $builder, array $options) {


        $builder
->add('employeeType', 'entity', array(
                    'class' => 'MyProject\EntityBundle\Entity\Employee',
                    'property' => 'name',
                      'multiple'=>'true','query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },

}
于 2012-05-02T04:19:24.810 に答える
1

フォームを別のフォームに埋め込む場合、UserType::getDefaultOptions() で data_class オプションを設定して、埋め込まれたフォームがマップするオブジェクトのタイプを宣言する必要があります。

例については、 http://symfony.com/doc/current/book/forms.html#embedding-a-single-objectを参照してください。

于 2012-05-01T18:31:14.893 に答える