Как использовать Ajax в Symfony 1.4 (заполнение поля формы) - PullRequest
0 голосов
/ 21 июня 2011

Я новичок в Symfony Framework.Я пытаюсь заполнить поле формы city_id на основе выбора, сделанного в поле выбора states.

Я создал новый метод в файле actions.class.php с именем getStates ()

вот код для него.

public function executeGetCities(sfWebRequest $request)
{
    $this->forwardUnless($query = $request->getParameter('stateId'), 'users', 'index');

    $this->states = Doctrine_Query::create()
                    ->from('States s')
                    ->where('s.id = ?', array($request->getParameter('stateId')));

    if($request->isXmlHttpRequest())
    {
        echo json_encode($this->states);
    }
}

при событии изменения состояний код javascript выглядит следующим образом:

$('#users_states').change(function(){
            populateSelectBox('users_city_id', 'get', '<?php echo url_for('states/getCities/'); ?>', {stateId:$(this).val()})
        });

функция populateSelectBox просто перебирает json и заполняет егов поле формы city_id.

Но приведенный выше запрос выдает ошибку и говорит, что представление getcities не существует.

Пожалуйста, помогите мне сделать это.

1 Ответ

1 голос
/ 21 июня 2011

У вас есть специальный маршрут для обработки этого действия в вашем маршруте?
Если вы используете маршрутизацию по умолчанию, вы должны сначала создать специальный маршрут с определенным параметром для stateId. Вы можете вручную протестировать сгенерированный URL в своем браузере (вы должны отключить тест ajax в своем действии).

И ваш запрос на доктрину не выполнен! вы можете вернуть массив с fetchArray:

public function executeGetCities(sfWebRequest $request)
{
    //$this->forwardUnless($query = $request->getParameter('stateId'), 'users', 'index');

    $this->states = Doctrine_Query::create()
                    ->from('States s')
                    ->where('s.id = ?', array($request->getParameter('stateId')))->fetchArray();

    //if($request->isXmlHttpRequest())
    //{
        echo json_encode($this->states);
    //}
}
...