2015-09-06 98 views
0

我有一個消息實體和一個用戶。我想讓用戶能夠發送消息給其他人。我已經可以發送和接收消息,一切工作正常,但爲了選擇消息的接收者,所有用戶的默認下拉列表。Symfony textfield ajax用戶

我想要做的是將下拉列表更改爲文本字段,並將AJAX創建到數據庫,並檢索找到的匹配插入到文本字段中的關鍵字的用戶列表。當點擊其中一個時,用戶被引入到文本框中。

,我現在面臨的問題是,我不知道怎麼打發,而不是明文的實體,因爲我得到這個錯誤

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

另一個問題,就是有,這是否更容易捆綁或插件我可以修改?或者我每次都必須自己做每個阿賈克斯領域?

我建立的形式,像這樣

$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

看到[this](http://stackoverflow.com/questions/23235080/is-it-possible-to-have-an-autocomplete-text-box-in-symfony-bootstrap) – user2268997

回答

1

我覺得有兩種方法可以解決這個問題。

1)用mapped = FALSE屬性添加一個custum formfield。

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

2)使用data-transformer

+0

使用數據轉換器聽起來像是一個單一領域的許多工作。有沒有很好的理由在未映射的字段上使用它? –

+0

數據轉換器並不像你想像的那麼多。使用未映射字段的原因是該字段只顯示(部分)用戶名,而不是名稱,但是最終存儲到數據庫中的對應ID。提交表單時,仍然可以讀出已提交的名稱,從數據庫中檢索相應的用戶,並通過addReceiver()方法將用戶實體添加到Message實體中。 –

+0

順便說一句,如果你想使用jQuery的自動完成,你可能想看看這個最近的問題:http://stackoverflow.com/questions/32334289/adding-jquery-autocomplete-in-symfony2-entity-field/ 32341635#32341635 –