繁体   English   中英

Symfony表单实体

[英]Symfony Form Entity

我有实体“用户”和“字段城市”和“国家/地区” ManyToOne,如果用户输入个人资料,则创建表格-PersonalInformation,不知道如何将国家/地区带到城市,然后用户会下拉列表。现在我有错误,现在不知道如何解决了:

Notice: Object of class Proxies\__CG__\PillsBundle\Entity\Country could not be converted to int 

实体

/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{


    /**
 * @var \PillsBundle\Entity\Cities
 *
 * @ORM\ManyToOne(targetEntity="\PillsBundle\Entity\Cities")
 * @ORM\JoinColumn(name="city_id", referencedColumnName="id", nullable=true)
 */
private $city;

/**
 * @var \PillsBundle\Entity\Country
 *
 * @ORM\ManyToOne(targetEntity="\PillsBundle\Entity\Country")
 * @ORM\JoinColumn(name="country_id", referencedColumnName="id", nullable=true)
 */
private $country;

和城乡

class Cities
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

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

class Country
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

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

我创建表格

class CityType extends AbstractType
{
private $em;

public function setEntityManager(EntityManager $em)
{
    $this->em = $em;
}

public function getCity()
{
    $citiess = $this->em->getRepository('PillsBundle:Cities')->findAll();
    $new_cities = array();

    foreach($citiess as $citie) {
        $new_cities[$citie->getCity()] = $citie->getCity();
    }

    asort($new_cities);

    return $new_cities;
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'choices' => $this->getCity(),
        'multiple' => false,
        'required' => false,
    ));
}

public function getParent()
{
    return 'choice';
}

public function getName()
{
    return 'cities';
}
}

国家类别CountryType扩展了AbstractType {private $ em;

public function setEntityManager(EntityManager $em)
{
    $this->em = $em;
}

public function getCountry()
{
    $countrys = $this->em->getRepository('PillsBundle:Country')->findAll();
    $new_country = array();

    foreach($countrys as $country) {
        $new_country[$country->getCountry()] = $country->getCountry();
    }

    asort($new_country);

    return $countrys;
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'choices' => $this->getCountry(),
        'multiple' => false,
        'required' => false,
    ));
}

public function getParent()
{
    return 'choice';
}

public function getName()
{
    return 'country';
}
}

并以表格形式使用

    public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('firstname', null, array('label' => 'First Name', 'max_length' => 255, 'required' => false))
        ->add('lastname', null, array('label' => 'Last Name', 'max_length' => 255, 'required' => false))
        ->add('email', null, array('label' => 'Email', 'max_length' => 255, 'required' => false))
        ->add('city', 'cities', array('label' => 'Location','required' => false, 'mapped' => true, 'attr' => array('placeholder' => 'Select Location') ))
        ->add('country', 'country', array('label' => 'Country','required' => false, 'mapped' => true, 'attr' => array('placeholder' => 'Select Country') ))

        ->add('skype', null, array('label' => 'Skype', 'max_length' => 255, 'required' => false))
        ->add('telephone', null, array('label' => 'Phone', 'max_length' => 255, 'required' => false, 'attr' => array('data-inputmask' => "'alias': 'date'")))
        ->add('save', 'submit');
}

和模板:

<div class="form-group">
{{ form_label(infoForm.country, label|default(null), {'label_attr': {'class': 'control-label'}}) }}
{{ form_widget(infoForm.country, {'attr': {'class': 'form-control select2 select2_sample4'}}) }}
</div>
<div class="form-group">
{{ form_widget(infoForm.city, {'attr': {'class': 'form-control input-xlarge select2me'}}) }}
</div>

和动作:

    $formType = new DeveloperPersonalInformationType();
    $form = $this->createForm($formType, $developer);
    $personalInformationForm = $form->createView();

add()函数的第二个参数必须是formfield-type,例如text或textarea( 请参阅完整详细信息 )。 我认为您想使用“实体”类型。

$builder
    ->add('country', 'entity', , array(
        'class' => 'PillsBundle:Country',
        'choice_label' => 'Select Country',
));

如果“国家/地区”实体对象没有__toString()方法,则需要choice_label选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM