在symfony2中创建新类型

时间:2012-07-10 13:20:08

标签: symfony doctrine-orm

如何在Symfony2中创建FormType以将实体转换为字符串并返回?

我已完成here中的所有内容,但有错误:

Expected argument of type "string", "<Vendor>\<Bundle>\Entity\User" given

如何创建将文本字段转换为用户对象的表单?

2 个答案:

答案 0 :(得分:3)

假设User有一个username字段,我会进行如下变换。 注意transform用于Userstring转换,而reverseTransform则相反。

将变换器添加到表单字段:

$builder
    ->add('user', 'text')
    ->addViewTransformer($transformer)

相关代码(例如你引用的例子):

/**
 * Transforms an User to a string.
 *
 * @param  User|null $user
 * @return string
 */
public function transform($user)
{
    return $user ? $user->getUsername() : '';
}

/**
 * Transforms a string to an User.
 *
 * @param  string $username
 * @return User|null
 */
public function reverseTransform($username)
{
    if(empty($username)) return null;

    $user = $this->om
        ->getRepository('AcmeHelloBundle:User')
        ->findOneBy(array('username' => $username))
    ;

    return $user; // Can be null
}

答案 1 :(得分:0)

您可以在此处提取此表单类型并使用它。 https://github.com/symfony/symfony/pull/1951它可以满足您的要求。