Symfony文本字段ajax用户


Symfony textfield ajax users

我有一个Message实体和一个User实体。我想让用户能够发送消息给其他人。我已经可以发送和接收消息,一切都很好,但是为了选择消息的接收者,默认的下拉菜单中包含了所有用户。

我想做的是将下拉框更改为文本字段,并对数据库进行AJAX,并检索与文本字段中插入的关键字匹配的用户列表。当点击其中一个时,用户就会出现在文本框中。

我面临的问题是,我不知道如何传递实体而不是明文,因为我得到这个错误

Argument 1 passed to PrivateMessageBundle'Entity'Message::setReceiver() must be an instance of CrudBundle'Entity'User, string given

另一个问题,是否有一个包或插件更容易做到这一点,我可以修改?还是每个ajax字段我都要自己做?

我正在创建这样的表单

$builder
    ->add('title')
    ->add('content','textarea')
    ->add('receiver','text');

默认情况下,接收者是一个下拉选择,并自动选择用户实体,但一旦我将其更改为文本,它就不会。

如果你需要的话,这里还有我的实体的相关部分:

class Message
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @var string
     *
     * @ORM'Column(name="title", type="string", length=50)
     */
    protected $title;
    /**
     * @ORM'ManyToOne(targetEntity="CrudBundle'Entity'User")
     * @ORM'JoinColumn(referencedColumnName="id")
     */
    protected $receiver;
    /**
     * @ORM'ManyToOne(targetEntity="CrudBundle'Entity'User")
     * @ORM'JoinColumn(referencedColumnName="id")
     */
    protected $sender;
    /**
     * @var string
     *
     * @ORM'Column(name="content", type="string", length=2000)
     */
    protected $content;

和我的User类,扩展FOSUserBundle的BaseUser类。

class User extends BaseUser implements AuthorInterface
{
    /**
     * @ORM'Id
     * @ORM'Column(type="integer")
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;

我认为有两种方法可以解决这个问题。

1)添加一个带有mapped = FALSE属性的自定义表单字段。

->add('ajaxsearch', null, array('mapped' => false))

2)使用数据转换器