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

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

/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».


person Matt Huggins    schedule 16.01.2011    source источник
comment
Мэтт... добавил еще одно обновление.   -  person Tom    schedule 17.01.2011


Ответы (3)


При доступе к переменным используйте объект $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();
person Tom    schedule 16.01.2011
comment
Но я пытаюсь использовать параметры в sfDoctrineRoute, и он не принимает мои параметры, когда я использую их в строке запроса. - person Matt Huggins; 16.01.2011
comment
Есть ли они в вашем правиле маршрутизации в routing.yml? URL-адрес: /пользователь/логин/:foo/:abc ....? - person Tom; 16.01.2011
comment
Нет, я не хочу, чтобы они были частью структуры каталогов, я хочу иметь возможность вводить в адресную строку: /user/login?foo=bar&abc=123 - person Matt Huggins; 16.01.2011
comment
Ясно... тогда, оставив их вне правила маршрутизации и просто поместив то, что у вас есть, должно работать, в том числе для ввода. -стандартный способ. Я помню, как столкнулся с несколькими случаями. Не могли бы вы вставить пример того, как вы добавляете их в свой код? - person Tom; 16.01.2011
comment
Или, может быть, мне следует уточнить: ввод их в строке URL должен работать без каких-либо настроек и должен сделать параметры доступными для запрашиваемого вами действия. Есть ли что-то еще, что вы хотите сделать с параметрами вместо этого? - person Tom; 16.01.2011
comment
Я вставил простой пример кода, который я пытаюсь использовать в вопросе. В конечном итоге я хотел бы использовать sfDoctrineRoute (или пользовательский маршрут), который будет принимать параметры через GET, POST или любой другой метод и использовать их при вызове $this->getRoute()->getObject(). К сожалению, все классы маршрутов не видят никаких параметров, если только они не определены в строке url файла routing.yml. - person Matt Huggins; 16.01.2011

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

routing:
  class: sfPatternRouting
  param:
    extra_parameters_as_query_string: true
person prodigitalson    schedule 20.01.2011

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

default:
  url:   /:module/:action
person COil    schedule 25.02.2011