php - 使用数据库+ Symfony 2 和 Doctrine 中的值填充表单中的选择列表

标签 php symfony doctrine

我想创建一个表单,仅从一个选择列表开始,其中包含从数据库中选择的值。
这是实体区域,我想用区域填充下拉列表。

<?php

namespace Reuzze\ReuzzeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Regions
 *
 * @ORM\Table(name="regions")
 * @ORM\Entity
*/
class Regions
{
    /**
     * @var integer
     *
     * @ORM\Column(name="region_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $regionId;

    /**
     * @var string
     *
     * @ORM\Column(name="region_name", type="string", length=45, nullable=false)
     */
     protected $regionName;



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

    /**
     * Set regionName
     *
     * @param string $regionName
     * @return Regions
     */
    public function setRegionName($regionName)
    {
        $this->regionName = $regionName;

        return $this;
    }

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

这是我的表格:

class RegionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('regionName'   , 'text', array(
            'label' => 'Region Name',
            'attr' => array('placeholder' => 'Region Name')
        ));
    }

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

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Reuzze\ReuzzeBundle\Entity\Regions',
        ));
    }

}

但现在我想在选择列表中显示区域,而不是在文本框中输入名称。有谁知道我如何以我的形式做到这一点?我如何在我的 View 中显示它?

最佳答案

Symfony 文档中清楚地记录了这一点 - Choice Field

$builder->add('regions', 'entity', array(
    'class' => 'ReuzzeReuzzeBundle:Regions',
    'property' => 'regionName',
    'expanded' => false,
    'multiple' => false
));

像这样的事情应该会让你继续下去。

注意 此代码将放置在具有选择框的表单中。您可能不想只渲染一个没有其他任何东西的选择框。

更新

文档还向您展示了 how to render a form in a template .

在你的 Controller 中:

$region = new Region();
$form = $this->createForm(new RegionType(), $region ); //or create a different form

// ....

return $this->render('ReuzzeReuzzeBundle:Default:index.html.twig', array(
        'form' => $form->createView(),
));

在 Twig 模板 index.html.twig 中:

{{ form_start(form) }}
    {{ form_errors(form) }}

    {{ form_row(form.regions) }
{{ form_end(form) }}

关于php - 使用数据库+ Symfony 2 和 Doctrine 中的值填充表单中的选择列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20909307/

相关文章:

javascript - 为什么我的代码无法在 jquery 中正确计算计数?

php - 尝试从数据库检索数据时出错

php - Symfony2 日期时间查询生成器

php - 创建论坛灯泡(未读)系统的最有效方法是什么?

php - 如何对 PHP 特征进行单元测试

symfony - Doctrine 复合主键外键

php - Symfony 2 : Swiftmailer not sending, 没有错误

php - Symfony - 使用服务工厂还是服务配置器更好?

symfony - Doctrine - 通过关系发现了一个新实体

php - Doctrine 2 与连接表中附加列的多对多关系