URL路由无法正常工作

时间:2014-03-24 23:24:50

标签: silverstripe

我正在尝试让URL路由工作,以便我可以通过AJAX调用控制器的功能。 AJAX调用形成为“ajax / {控制器中的函数名称} / {传递给函数的ID}”。

我已将以下内容添加到我的routes.yml:

Director:
  rules:
    'ajax': 'TakeActionPage_Controller'

在我的TakeActionPage_Controller中,我有:

private static $url_handlers = array(
    'electoratesfrompostcode/$ID' => 'electoratesfrompostcode',
);

public function electoratesfrompostcode(SS_HTTPRequest $request)
{
    $id = (int)$request->param('ID');

    return $this->getElectoratesFromPostcode($id);
}

这不起作用。当我将?debug_request=1添加到TakeActionPage的URL时,我得到:

Debug (line 250 of RequestHandler.php): Testing 'electoratesfrompostcode/$ID' with '' on TakeActionPage_Controller
Debug (line 250 of RequestHandler.php): Testing '$Action//$ID/$OtherID' with '' on TakeActionPage_Controller
Debug (line 258 of RequestHandler.php): Rule '$Action//$ID/$OtherID' matched to action 'handleAction' on TakeActionPage_Controller. Latest request params: array ( 'Action' => NULL, 'ID' => NULL, 'OtherID' => NULL, )
Debug (line 184 of RequestHandler.php): Action not set; using default action method name 'index'

我不确定如何制作这些调试消息。关于如何使这个工作的任何想法?

2 个答案:

答案 0 :(得分:1)

尝试添加$allowed_actions数组

public static $allowed_actions = array('electoratesfrompostcode');

查看文档: http://doc.silverstripe.org/framework/en/topics/controller#usage

答案 1 :(得分:0)

原来我在问题中发布的代码实际上正在运行。我之前有不同的代码,但是在使用?debug_request=1时返回了相同的调试信息。然后我将代码更改为问题中发布的内容,并且仍然获得相同的调试信息,因此我认为它仍然无效,但实际上是。

如果它显示与工作代码和非工作代码完全相同的消息,则不确定如何制作调试信息。