Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как передать обычные параметры в URL в Symfony?

Автор вопроса: Matt HugginsОтветов: 3

Я пытаюсь передать параметры через обычную строку запроса, как таковую:

/user/login?foo=bar&abc=123

К сожалению, нигде данные в экземпляре sfRoute не содержат данных для параметров foo или abc. Как я могу это исправить?

Изменить: вот код, который я использую по запросу Тома:

/apps/api/config/routing.yml:

login:
  url:   /user/login
  param: { module: user, action: login }

/apps/api/modules/user/actions/actions.class.php:

class userActions extends sfActions {
    public function executeLogin(sfWebRequest $request) {
        echo '<pre>'.print_r($this->getRoute(), true).'</pre>';
    }
}

Вот и все. Вывод показывает, что $this->getRoute() не содержит информации о foo или abc, когда я передаю их в строке запроса с URL-адресом "/user/login?foo=bar&abc=123".

  • Мэтт... добавил еще одно обновление. Tom 17.01.2011

query-stringroutingsymfony1

Ответы

Ответ 1 · рейтинг 2 · Tom

При доступе к переменным используйте объект $request, а не sfRoute:

$request->getParameter('foo')

Убедитесь, что функция в действии, которое получает эти параметры запроса, объявляет их как входящую переменную:

public function executeSomeAction($request)  {  }

Если вы ищете эквивалент $_SERVER['QUERY_STRING'] в Symfony, я его не нашел и сам бы заинтересовался.

ОБНОВЛЕНИЕ:

Я думаю, что метод, который вы используете, будет печатать только маршрут. Я думаю, что для этого вам нужно получить к ним доступ через объект $request, как я упоминал ранее. Например:

$params_typed = $request->getParameterHolder();  // ... and grab them from here

... или использовать строку запроса сервера или обрабатывать входящие параметры индивидуально.

Извините, я не могу больше помочь.

ВТОРОЕ ОБНОВЛЕНИЕ:

Собственно, только что проверил небольшую идею:

если вы определяете параметры в файле routing.yml следующим образом:

login:
  url:   /user/login
  param: { module: user, action: login, foo: something, abc: something }

Вы можете получить к ним доступ через:

$full_path = sfContext::getInstance()->getRouting()->getCurrentInternalUri();

Ответ 2 · рейтинг 1 · prodigitalson

Вам нужно настроить это в factory.yml я думаю :

routing:
  class: sfPatternRouting
  param:
    extra_parameters_as_query_string: true

Ответ 3 · рейтинг 1 · COil

Обратите внимание, что если вы хотите использовать параметр "extra_parameters_as_query_string: true", вам необходимо удалить последнюю звезду вашего маршрута:

default:
  url:   /:module/:action

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы