2012-09-05 34 views
2

在Silverstripe至少存在四種方式來引導控制器以正確的行動:差異betweeen控制器:: handleAction(),控制器::的handleRequest(),控制器:: allowed_actions和控制器:: url_handlers

  1. Controller::handleAction()
  2. Controller::handleRequest()
  3. Controller::allowed_actions
  4. Controller::url_handlers

我理解Controller::allowed_actionsController::handleAction()的概念: 我可以使用它們來定義執行哪個動作。然後,url_handlers陣列似乎用於向控制器添加更多規則。

所以什麼時候應該使用我的控制器上的哪個數組/函數?我應該何時使用Controller::handleRequest()以及如何使用此功能?使用不同的方法有什麼區別?

到目前爲止,我讀了很多關於這個話題,但每個崗位只提上述可能性之一,該方法是永遠不會比...

下面是文章列表我已經找到:

回答

1

製造的控制器操作的最簡單的方法是使用allowed_actions以及相應的方法:

static $allowed_actions = array(
    'myaction' 
); 

function myaction() { 
} 

url_handlers讓你定義多個URL的模式,並允許您委派控制到另一個RequestHandler物體,例如作爲表單或FormField。這是如何處理GridField細節表單的URL處理。

你真的不應該需要重寫的handleRequest()或handleAction()

  • 的handleRequest()是一個分析url_handlers
  • handleAction()調用的方法,如在例如 'myaction' 功能以上

希望這可以清除一些事情。