我的控制器的$ url_handlers无效。已成功调用已定义的方法,但也会触发404。
编辑:为上下文添加了$ allowed_actions(感谢wmk)。
示例代码:
class MyPage_Controller extends Page_Controller {
. . .
private static $allowed_actions = array(
'test'
);
private static $url_handlers = array(
'view/$ID/test/' => 'test'
);
. . .
注意:网址/test
动作:
class MyPage_Controller extends Page_Controller {
. . .
public function test() {
var_dump($this->getRequest()->param('ID'), $this->getAction());
return $this;
}
. . .
这导致404模板显示在var_dump输出下方(使用URL //view/2/test/
):
string(1) "2" string(4) "test"
在Silverstripe 3.5.1中测试
答案 0 :(得分:1)
从网址格式中删除尾随的/
。
private static $url_handlers = array(
'view/$ID/test' => 'test'
);
当HTTPRequest::match()
检查模式时,它会将其与explode('/', $pattern)
分开。当/
稍后验证在URL中遇到模式的所有部分(通过调用RequestHandler::handleRequest()
)时,额外的HTTPRequest::allParsed()
会导致出现差异,因此它会返回404
。