Маршрутизация с параметром и виджетом JQueryAutocompleter (symfony) - PullRequest
0 голосов
/ 05 декабря 2010

У меня есть форма с автозаполнением виджета, но когда я добавляю параметр в URL, мой виджет не работает.

Я думаю, что это проблема с маршрутизацией, потому что когда я удаляю параметр, автодополнение работает, но я не знаю, как и где я должен определить новый маршрут. (Я пробовал в myModule / config / routing.yml, но думаю, что не понимаю, как использовать новую маршрутизацию).

Ссылка для перехода на мою форму:

<a href="<?php echo url_for('refus/new?logement='.$logement->getId()) ?>">Nouveau refus</a>

Действия:

  public function executeAutocompleteNud(sfWebRequest $request) {
  // Fonction générant une liste de locataire pour le champs autocomplete
    $this->getResponse()->setContentType('application/json');

    // Récupération de la chaine entrée par l'utilisateur
    $string = $request->getParameter('q');

    // Requète récupérant la liste des locataires dont le nom contient la chaine entrée
    $requete = Doctrine::getTable('locataire')->getDataWhereNUD($string);

    // Construction d'un tableau associatif à partir des résultats de la requète
    $resultats = array();
    foreach ($requete as $res):
        $resultats[$res->getNud()] = $res->getNud();
    endforeach;

    return $this->renderText(json_encode($resultats));
  }

  public function executeNew(sfWebRequest $request)
  {
    $log = $request->getParameter('logement');

    $refus = new Refus(); 
    $refus->set('logement', $log); 

    $this->form = new refusForm($refus);

    $this->setTemplate('new');
  }

Схема виджета:

$this->widgetSchema['locataire'] = new sfWidgetFormJQueryAutocompleter(array('url' => 'autocompleteNud',
                                                                                     'config' => '{
                                                                                            scrollHeight: 300,
                                                                                            autoFill: true}'));

Ответы [ 2 ]

0 голосов
/ 31 марта 2011

Я решил мою проблему следующим образом:

symfony: форма с одним параметром

0 голосов
/ 17 декабря 2010

система маршрутизации была для меня загадкой, но после прочтения, может быть, я помог вам. В приложениях> имя_приложения> confing> routing.yml добавьте ТОП файла. этот маршрут:

refus_new_route:
  url: /refus/new/:logment_id
  params: { module: refus , action: new}
autocompleteNud:
  url: /refus/autocompleteNud/:q
  params: { module: refus , action: autocompleteNud}

Это говорит Symfony, что когда кто-то запрашивает что-то вроде: http://hosts/index.php/refus/new/10, он должен посмотреть в модуле, отклонить действие с именем new и передать параметр с именем logment_id.

После этого вы должны очистить кеш.

Второе, что нужно сделать, это изменить это

<a href="<?php echo url_for('refus/new?logement='.$logement->getId()) ?>">Nouveau refus</a>

для этого

<?php echo link_to('Nouveau refus', 'refus/new', array('logement' => $logement->getId())); ?>

Наконец, измените ваш виджет, чтобы использовать новый маршрут:

sfConfig::getInstance()->getConfiguratio()->loadHelpers('Url');
$this->widgetSchema['locataire'] = new sfWidgetFormJQueryAutocompleter(array('url' => url_for('@autocompleteNud'),
                                                                                     'config' => '{
                                                                                            scrollHeight: 300,
                                                                                            autoFill: true}'));

Надеюсь, это полезно!

...