【问题标题】:Query string data not being used in getObject() method of sfDoctrineRoute (symfony)sfDoctrineRoute (symfony) 的 getObject() 方法中未使用的查询字符串数据
【发布时间】:2026-01-06 10:05:02
【问题描述】:

我正在尝试在 Symfony 1.4 中制作 API 类型的应用程序。我的目标是接受用户名/密码组合,根据提供的查询参数检索对象。

这是我为路线设置的内容:

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 数据中为usernamepassword 传递什么值。 (我还尝试在上面将sf_format 设置为“get”的查询字符串中执行GET,并得到相同的结果。)

我做了一些挖掘,发现最终被调用的是sfDoctrineRoutegetObjectsForParameters($parameters) 方法。查询是根据$parameters 数组中的数组键/值执行的(仅适用于表中具有匹配列名的那些键)。然而,不管我用usernamepassword 的参数值调用URL,这里$parameters 的值总是等于:

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

如果我将url 值更改为“/user/login/:username/:password”之类的值,我将不再遇到此问题:$parameters 数组会按预期包含用户名/密码数据。但是,我不想在 URL 中包含这些数据。任何建议表示赞赏。

【问题讨论】:

    标签: routing symfony1 doctrine symfony-1.4


    【解决方案1】:

    只有获取数据与路由一起使用。如果您考虑一下,这是有道理的。只有 get 变量是 URL 的一部分。

    您可以在 URL 中包含登录信息。对象将通过登录检索,您需要做的唯一额外的事情是检查密码是否正确。

    在大多数情况下,sfDoctrineGuardPlugin 足以处理与配置文件相关的功能,包括登录。即使您不想使用它,也可以获取它的源代码并查看它是如何工作的。对你有很大帮助。

    【讨论】:

    • 但是即使我把sf_method改成“get”,还是没有得到查询字符串数据。
    • 你在url中添加了登录参数吗?您需要这样做才能使其与学说路线一起使用。
    • 这不会满足我的需要。我想我必须创建自己的路线类。谢谢您的帮助!自从该信息 + cmets 回答问题以来,我已经给了你答案。
    最近更新 更多