在Symfony2表单中显示ManyToOne字段?

时间:2012-02-23 05:03:39

标签: symfony

我有两个实体文件,一个是user.php,另一个是usertype.php。现在我想显示一个包含3个字段的登录表单,即用户名,密码和usertype。 usertype将是一个从usertype表中获取数据的选择。这是我在user.php中编写的代码,用于为usertype_id

创建一个多字段字段
/**
* @ORM\ManyToOne(targetEntity="Usertype")
*/
protected $usertype;

以下是我的表单生成代码

class LoginForm extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('login', 'text', array('label'  => 'Username',));
        $builder->add('password');
    }
}

现在我需要在表单构建器中再添加一个字段,该字段将是一个usertype表的选择。

3 个答案:

答案 0 :(得分:9)

...
use Acme\YourBundle\Entity\Usertype;

class LoginForm extends AbstractType {

    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('usertype', 'entity',
            array(
                'class' => 'AcmeYourBundle:Usertype'
                'label' => 'User Type',
            )
        );
    }
}

您可以阅读有关the entity field type的更多信息,它将为您提供此类字段的可用选项。

请勿忘记在模型中添加 __toString() 方法,以告知表单构建器要显示的内容。

namespace Acme\YourBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

class Usertype
{
    public function __toString()
    {
        return $this->getName();
    }
}

答案 1 :(得分:2)

还有其他方法可以做到,但你可以试试这个:

$builder->add('usertype', 'entity',
    array(
        'class' => 'YourBundle:UserType
        'required' => true, // Choose if it's required or not
        'empty_value' => 'User type', // Remove this line if you don't want empty values
        'label' => 'Type', // You can put a label here or remove this line
    )
);

我希望它有所帮助!

答案 2 :(得分:-1)

http://symfony.com/doc/2.0/reference/forms/types/entity.html

property¶

type:string

这是应该用于在HTML元素中将实体显示为文本的属性。如果留空,则实体对象将被强制转换为字符串,因此必须具有__toString()方法。