Symfony,只能通过前进行动

时间:2011-06-30 05:31:26

标签: model-view-controller symfony1

是否可以阻止直接访问symfony中的操作。该操作仅可通过“前进”访问。基本上,这是一种查看请求是否来自另一个操作的方法。

我正在尝试实现这一点,因为第一个操作会处理大量的验证,如果失败,它会继续执行该操作。如果成功,它将转向适当的行动;此操作需要具有安全输入(从第一个操作验证)。为了保持代码DRY,第二个动作不需要再次重新验证所有输入。

那为什么不做一个私有的方法呢?第二个动作是一个插件,它是在飞行中决定它从第一个动作开始,该动作有其自己的一组其他未来动作/模板。简单地转发而不是试图处理Symfony已经处理过的大量案例更有意义。

3 个答案:

答案 0 :(得分:7)

有多种方法可以实现这一目标。

1)确保路由无法访问您的操作。如果您有通配符路由,这将更难,但您可以随时添加一条路线,将您的操作的网址指向404页面。将这样的内容添加到routing.yml

disabled_action:
  url: /disabledController/disabledAction
  params: { module: default, action: error404 }

2)执行操作时检查操作堆栈。动作堆栈让您知道您被重定向的动作。您可以使用$this->getController()->getActionStack()在操作中访问它。如果getSize()大于1(在默认配置中),我们会转发。

答案 1 :(得分:0)

使用请求中提供的referrer参数

$ request-> getReferer()会为您提供上一个操作的完整网址

答案 2 :(得分:0)

我很好奇你为什么要努力实现这一目标。您是否希望有多个访问点转发到此操作?如果您只是定义了一个私有方法(默认情况下不可通过Web访问)并直接从另一个操作中调用它,该怎么办?