2014-10-21 53 views
0

我安裝了這個軟件包:GenemuFormBudnle,我嘗試做一個ajax自動完成。我有這個在我的表格:Symfony 2自動完成路由

$builder 
      ->add('PermitsCompany', 'genemu_jqueryautocompleter_entity', array(
       'route_name' => 'ajax_company', 
       'class' => 'MainCoreBundle:Company', 
      )); 

這在我的控制器:NewController.php

/** 
    * @Route("/ajax_company", name="ajax_company") 
    */ 
    public function ajaxCompanyAction(Request $request) 
    { 
     $value = $request->get('id'); 

     $permits = $this->getDoctrine()->getRepository('JokerCoreBundle:Company')->findAjaxValue($value); 


     $json = array(); 
     foreach ($permits as $permit) { 
      $json[] = array(
       'label' => $permit->getName(), 
       'value' => $permit->getId() 
      ); 
     } 

     $response = new Response(); 
     $response->setContent(json_encode($json)); 

     return $response; 
    } 

而這在我的路線:

ajax_company: 
    defaults: { _controller: MainCoreBundle:Permits:ajaxCompany} 
    pattern: /ajax_company/ 
    type:  annotation 

下面是一個錯誤信息:

AnnotationException:[語義錯誤]在 方法主要\ CoreBundle \控制器\ NewController :: ajaxCompanyAction() 註釋 「@Route」 從未被導入。你可能忘記爲這個註釋添加一個「使用」語句 ?

回答

1

你需要下面的行添加到您的控制器的頂部:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 

沒有它,控制器不必從註釋正確加載類的能力。

一個適當的JSON響應也應該有Content-Type設置正確:

$response = new Response(json_encode($json)); 
$response->headers->set('Content-Type', 'application/json'); 
return $response; 

these docs,你的建設者稍有不正確。使用這個來代替:

$builder 
    ->add('PermitsCompany', 'genemu_jqueryautocompleter_entity', array(
     'route_name' => 'ajax_company', 
     'class' => 'MainCoreBundle\Entity\Company', // Must use namespace here with slashes 
    )) 
; 

我已經檢查了GenemuFormBundle存儲庫,它看起來像不提供或與束注入到你的實體倉庫一個findAjaxValue功能。您必須在您的存儲庫中創建的findAjaxValue功能或恢復到一個輔助功能,如findBy像這樣:

$permits = $this->getDoctrine()->getRepository('JokerCoreBundle:Company')->findBy(array(
    'name' => $value, 
)); 

你正在嘗試使用看起來並不像一個完整的解決方案包,也不會打算成爲一個:

在這些實現中可能有一些錯誤,這個包只是一個表單類型的想法,對於Symfony2項目可能非常有用。

也許你應該記住這一點,並試着想出自己的解決方案,或找到一個替代捆綁。

+0

現在錯誤消失感謝:)但你有什麼想法爲什麼autocomplete仍然沒有工作?我得到一個空的文本輸入,但是當我輸入的東西不會自動完成它... – Cre3k 2014-10-21 21:32:38

+0

這是一個路線問題? – Cre3k 2014-10-21 21:33:27

+0

@ Cre3k您應該檢查開發工具或Firebug中的控制檯和網絡選項卡,具體取決於您使用的瀏覽器。您是否嘗試直接在瀏覽器中加載'/ ajax_company'路線? – sjagr 2014-10-21 21:34:32