在symfony2中使用doctrine的dbal和表单

时间:2012-03-22 17:23:33

标签: php symfony

所以我想做以下事情:

我在/Form/Type/UserType.php

创建了一个表单类

我有一个包含状态列表的表(名为“states”的表)。

我想在下拉菜单中显示所有这些状态。

我应该在UserType类中使用哪些代码来显示所有状态?

我试过了:

    $request = new Request;
    $conn = $request->get('database_connection');
    $states = $conn->fetchAll('SELECT state_code, state_name FROM states');

    $builder->add('state', 'choice', array(
        'choices'   => $states,
        'required'  => false,
   ));

但这给了我一个错误。基本上,我想从表状态查询所有状态,并从所有这些状态创建一个下拉菜单。

2 个答案:

答案 0 :(得分:0)

您可以创建State实体,将其映射到states表,并与OneToMany实体建立User关系。然后,在UserType表单中$builder->add('state')应自动创建下拉字段。您还必须使用data_class表单User方法为getDefaultOptions实体设置UserType选项。

答案 1 :(得分:0)

@ m2mdas为您提供了正确的基于对象的答案。但是,如果您真正想要的是存储state_code,那么您拥有的内容几乎可以正常工作。你只需要正确连接即可。

class MyType extends extends AbstractType
{
    public function __construct($em) { $this->em = $em; }

    public function buildForm(FormBuilder $builder, array $options)
    {
        $conn = $this->em->getConnection();
        $statesx = $conn->fetchAll('SELECT state_code, state_name FROM states');

        // Need to index for the choice
        $states = array();
        foreach($statesx as $state) 
        { 
            $states[$state['state_code']] = $state['state_name']; 
        }

        $builder->add('state', 'choice', array(
            'choices'   => $states,
            'required'  => false,
        ));

...
// In your controller
$form = new MyType($this->getDoctrine()->getEntityManager());