【问题标题】:Symfony2: Same route path for 2 actionsSymfony2:2个动作的相同路由路径
【发布时间】:2014-09-10 13:52:53
【问题描述】:

是否可以有相同的路由路径但用于 2 个不同的操作。我想在用户登录时使用一个动作,在用户未登录时使用另一个动作。

/**
 * @Route("/", name="bundle_index")
 * @Template("NameBundle:Default:index.html.twig")
 */

/**
 * @Route("/", name="bundle_index_auth")
 * @Security("has_role('ROLE_USER')")
 * @Template("NameBundle:Default:auth.html.twig")
 */

【问题讨论】:

  • 我不这么认为; symfony 总是会触发第一个溃败动作。我建议在你的溃败中使用一个变量,比如* @Route("/{isset_var}", name="bundle_index") 并通过操作来处理它,这样如果没有设置它,就做第一件事,否则做第二件事;甚至在访问控制部分设置匿名用户的路径,然后在您的操作中处理它,如果用户未通过身份验证,则做第一件事,否则做第二件事

标签: php symfony authentication routes


【解决方案1】:

我认为不能使用具有不同名称的相同路径,而且我无法想象在哪些情况下这可能有用,即使我们可以做到(也许如果你更好地解释你想要实现的目标),但看看你的例子您可以在同一个操作中执行您需要的所有检查...检查 ROLE_USER 是否已授予用户(否则重定向用户或抛出与您的示例相同的行为的访问异常)并因此呈现正确的模板(显然需要任何其他操作)。

【讨论】:

  • 这就是我目前正在做的事情,有一个动作并检查用户是否登录,然后将他重定向到正确的动作。但我觉得它在用户的 url 中添加了垃圾。我希望用户无论是否登录都只能看到http://www.mywebsite.com/,但是当他登录时,他看不到相同的页面。无论如何,就像我说的那样,我已经实施了解决方案,但我仍然想知道。
  • 但是您检查用户的操作是从哪里来的?我希望它不是来自登录操作,不是吗?否则,您可以使用不同的 http 方法使用相同的路径,例如 CRUD 操作(GET 用于访问,POST 用于检查凭据) 乍一看这听起来非常类似于“记住我”操作......(显然已经在交响乐)。你想过Listener 还是Event
猜你喜欢
  • 1970-01-01
  • 2014-09-17
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 2020-08-30
  • 2015-04-04
  • 1970-01-01
相关资源
最近更新 更多