2015-04-23 225 views
0

如何在symfony2中創建自動完成,將從本地數據庫(一個輸入)加載用戶而不使用任何捆綁? 這裏是我的用戶實體:Symfony2自動完成搜索

<?php 

namespace Me\MainBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* @ORM\Entity(repositoryClass="Me\MainBundle\Repository\UsersRepository") 
* @ORM\Table(name="users") 
*/ 

class Users 
{ 
    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @Assert\NotBlank(
    *  message = "Users first name field can not be blank!", 
    *  groups={"registration"} 
    *) 
    * @Assert\Length(
    *  min = 3, 
    *  minMessage = "First name must be at least 3 characters long!", 
    *  groups={"registration","search"} 
    *) 
    * @ORM\Column(type="string", length=255, nullable=false, name="first_name") 
    */ 
    protected $firstName; 

    /** 
    * @Assert\NotBlank(
    *  message = "Users last name field can not be blank!", 
    *  groups={"registration"} 
    *) 
    * @Assert\Length(
    *  min = 3, 
    *  minMessage = "Last name must be at least 3 characters long!", 
    *  groups={"registration","search"} 
    *) 
    * @ORM\Column(type="string", length=255, nullable=false, name="last_name") 
    */ 
    protected $lastName; 

//relationship variables: 

    /** 
    * @ORM\OneToMany(targetEntity="UsersSkillLevel", mappedBy="userId") 
    **/ 
    protected $usersSkillLevels; 

    public function __construct() { 
     $this->usersSkillLevels = new ArrayCollection(); 
    } 

//getters, setters: 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set firstName 
    * 
    * @param string $firstName 
    * @return Users 
    */ 
    public function setFirstName($firstName) 
    { 
     $this->firstName = $firstName; 

     return $this; 
    } 

    /** 
    * Get firstName 
    * 
    * @return string 
    */ 
    public function getFirstName() 
    { 
     return $this->firstName; 
    } 

    /** 
    * Set lastName 
    * 
    * @param string $lastName 
    * @return Users 
    */ 
    public function setLastName($lastName) 
    { 
     $this->lastName = $lastName; 

     return $this; 
    } 

    /** 
    * Get lastName 
    * 
    * @return string 
    */ 
    public function getLastName() 
    { 
     return $this->lastName; 
    } 

    /** 
    * Add usersSkillLevels 
    * 
    * @param \Me\MainBundle\Entity\UsersSkillLevel $usersSkillLevels 
    * @return Users 
    */ 
    public function addUsersSkillLevel(\Me\MainBundle\Entity\UsersSkillLevel $usersSkillLevels) 
    { 
     $this->usersSkillLevels[] = $usersSkillLevels; 

     return $this; 
    } 

    /** 
    * Remove usersSkillLevels 
    * 
    * @param \Me\MainBundle\Entity\UsersSkillLevel $usersSkillLevels 
    */ 
    public function removeUsersSkillLevel(\Me\MainBundle\Entity\UsersSkillLevel $usersSkillLevels) 
    { 
     $this->usersSkillLevels->removeElement($usersSkillLevels); 
    } 

    /** 
    * Get usersSkillLevels 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getUsersSkillLevels() 
    { 
     return $this->usersSkillLevels; 
    } 
} 

和搜索形式:

$searchForm = $this->createFormBuilder() 
      ->setMethod('POST') 
      ->add('user_name', 'text', array('label' => 'User\'s name: ','attr' => array('placeholder' => 'Enter Users first or last name'))) 
      ->add('searchUsers', 'submit', array('label' => 'Search for employee')) 
      ->getForm(); 

當第一個或最後一個名稱後3個字母寫它應該彈出。

預先感謝您

+0

可能會幫助您解決問題的非交響樂答案: https://github.com/FREE-FROM-CMS/AutoComplete –

回答

0

我認爲這將有助於你:

兩件事情你需要做的:

1)創建一個數據轉換器

HICH讓你使用輸入字段,而不是鏈接實體的默認下拉菜單。

Data Transformer基本上將您的輸入(在您的情況下是一個用戶名字符串)轉換爲您可以與實體一起存儲的實際用戶對象。它可以讓你定義一個輸入字段,而不是鏈接實體的默認下拉菜單。看看文檔,它非常簡單。

2)創建Ajax的自動完成

這可以在客戶端使用任何你想要的庫(jQuery的,原型等)來完成,而你在你的控制器行動處理這個服務器端,並用JSON回覆或一個渲染模板。那裏有很多教程。如果沒有找到,則Ajax結果可能包含創建新用戶的鏈接。

數據轉換器是您需要關注的內容,在使用用戶界面之前,我會先做好工作。

參考波紋管:

How to add an autocomplete field in forms Symfony2?