Controller :: handleAction(),Controller :: handleRequest(),Controller :: allowed动作和Controller :: url处理程序之间的区别

时间:2012-09-05 09:26:44

标签: controller silverstripe

在Silverstripe中,至少有四种方法可以将Controller指向正确的操作:

  1. Controller::handleAction()
  2. Controller::handleRequest()
  3. Controller::allowed_actions
  4. Controller::url_handlers
  5. 我理解Controller::allowed_actionsController::handleAction()的概念: 我可以用它们来定义执行哪个动作。然后,url_handlers数组似乎用于向Controller添加更多规则。

    那我什么时候应该在我的控制器上使用哪个数组/功能?我应该何时使用Controller::handleRequest()以及如何使用此功能?使用不同的aproaches有什么不同?

    到目前为止,我已经阅读了很多关于这个主题的内容,但每篇文章都提到了上述可能性之一,这些方法从未被比较过......

    以下是我发现的帖子列表:

1 个答案:

答案 0 :(得分:1)

执行控制器操作的最简单方法是使用allowed_actions和相应的方法:

static $allowed_actions = array(
    'myaction'
);

function myaction() {
}

url_handlers允许您定义更多URL模式,并允许您将控件委托给另一个RequestHandler对象,例如Form或FormField。这就是如何处理GridField详细信息表单等的URL处理。

您不应该真正需要覆盖handleRequest()或handleAction()

  • handleRequest()是解析url_handlers的函数
  • handleAction()调用上面示例中的'myaction'等方法

希望这可以解决一些问题。