我正在尝试让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'
我不确定如何制作这些调试消息。关于如何使这个工作的任何想法?
答案 0 :(得分:1)
尝试添加$allowed_actions
数组
public static $allowed_actions = array('electoratesfrompostcode');
查看文档: http://doc.silverstripe.org/framework/en/topics/controller#usage
答案 1 :(得分:0)
原来我在问题中发布的代码实际上正在运行。我之前有不同的代码,但是在使用?debug_request=1
时返回了相同的调试信息。然后我将代码更改为问题中发布的内容,并且仍然获得相同的调试信息,因此我认为它仍然无效,但实际上是。
如果它显示与工作代码和非工作代码完全相同的消息,则不确定如何制作调试信息。