2014-10-21 4 views
0

번들을 설치합니다 : GenemuFormBudnle 그리고 나는 ajax 자동 완성을 시도합니다. 내 양식이 있습니다Symfony 2 자동 완성 라우팅

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

이 내 컨트롤러 : 여기

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

오류 메시지입니다 : 내 경로에서 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; 
    } 

그리고이 :

AnnotationException : [Semantical Error] 메서드의 주 "CoreRoade"Main \ CoreBundle \ Controller \ NewController :: ajaxCompanyAction() 을 가져 오지 않았습니다. 이 주석에 에 "사용"문을 추가하는 것을 잊어 버리셨습니까?

답변

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에 따르면, 빌더가 약간 잘못되었습니다. 대신 사용 : 나는 GenemuFormBundle 저장소를 검사 한과 findAjaxValue 기능을 제공하거나 엔티티 저장소에 번들로 주입되지 않은 것 같습니다

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

. 당신은 당신의 저장소에 findAjaxValue 기능을 만들거나, 도우미 함수에 같은 같은 같은 findBy 되돌려 야 하나 : 당신이 완벽한 솔루션처럼 보이지 않는 사용하려는 번들이 없으며 않는

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

이러한 구현에 버그가있을 수 있습니다.이 패키지는 단지 Symfony2 프로젝트에 매우 유용한 양식 유형에 대한 아이디어 일뿐입니다.

어쩌면 반드시 염두에두고 자신의 솔루션을 찾아 보거나 대체 번들을 찾으십시오.

+0

오류가 고맙습니다. :) 그러나 자동 완성이 아직 작동하지 않는 이유가 있습니까? 빈 텍스트 입력이 있는데 뭔가 입력하면 자동 완성되지 않습니다 ... – Cre3k

+0

이 경로 문제입니까? – Cre3k

+0

@ Cre3k 사용중인 브라우저에 따라 개발자 도구 또는 Firebug의 콘솔 및 네트워크 탭을 검사해야합니다. 브라우저에서'/ ajax_company' 경로를 직접로드 해 보셨습니까? – sjagr