Строковые данные запроса не используются в методе getObject () sfDoctrineRoute (symfony) - PullRequest
0 голосов
/ 15 января 2011

Я пытаюсь создать приложение типа API в Symfony 1.4. Моя цель - принять комбинацию имени пользователя и пароля, извлекая объект на основе предоставленных параметров запроса.

Вот что я настроил для своего маршрута:

login:
  url:     /user/login
  class:   sfDoctrineRoute
  options: { model: User, type: object }
  param:   { module: user, action: login }
  requirements:
    sf_method: post
    username: .+
    password: .+

В моем методе executeLogin(), когда я вызываю $this->getRoute()->getObject(), он всегда возвращает первый объект из таблицы, независимо от того, какие значения я передаю в данных POST для username и password. (Я также пытался выполнить GET в строке запроса с sf_format, установленным выше, как "get", и имел те же результаты.)

Я немного покопался и обнаружил, что в конечном итоге вызывается getObjectsForParameters($parameters) метод sfDoctrineRoute. Запрос выполняется на основе ключей / значений массива в массиве $parameters (только для ключей с совпадающими именами столбцов в таблице). Однако независимо от того, что я вызываю URL со значениями параметров для username и password, значение $parameters здесь всегда равно:

Array (
    'module' => 'user',
    'action' => 'login'
)

Если я изменю значение url на что-то вроде "/ user / login /: username /: password", у меня больше не будет этой проблемы: массив $parameters затем включает данные имени пользователя / пароля, как и ожидалось. Однако я не хочу включать эти фрагменты данных в URL. Любой совет приветствуется.

1 Ответ

1 голос
/ 15 января 2011

Только получение данных используется с маршрутами. Это имеет смысл, если вы думаете об этом. Только переменные get являются частью URL.

Вы можете включить логин в URL. Объект будет извлечен при входе в систему, и единственное, что вам нужно сделать, это проверить правильность пароля.

В большинстве случаев sfDoctrineGuardPlugin более чем достаточно для обработки функций, связанных с профилем, включая вход в систему. Даже если вы не хотите использовать его, захватите его исходный код и посмотрите, как он работает. Это вам очень поможет.

...