2014-10-21 3 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: [Семантическая ошибка] Аннотации «@Route» в методе Main \ CoreBundle \ Controller \ NewController :: ajaxCompanyAction() не был импортирован. Возможно, вы забыли добавить инструкцию «use» для этой аннотации?

ответ

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

Теперь ошибка исчезла СПАСИБО :), но есть ли у вас какие-либо идеи, почему автозаполнение все еще не работает? Я получил пустой ввод текста, но когда я печатаю что-то, это не автозаполняет его ... – Cre3k

+0

Является ли это проблемой маршрута? – Cre3k

+0

@ Cre3k Вы должны изучить вкладку консоли и сети в Инструментах разработчика или Firebug в зависимости от того, какой браузер вы используете. Вы пытались загрузить маршрут '/ ajax_company' непосредственно в своем браузере? – sjagr

Смежные вопросы