Silverstripe $url_handlers 不工作 - 运行方法但也会触发 404 错误

Silverstripe $url_handlers not working - runs method but also triggers a 404 error

我的控制器 $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'
    );

    . . .

注:URL/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 中测试

从 URL 模式中删除尾随 /

private static $url_handlers = array(
    'view/$ID/test' => 'test'
);

HTTPRequest::match()检查模式时,它用explode('/', $pattern)分隔它。当 RequestHandler::handleRequest() 稍后验证模式的所有部分在 URL 中遇到时(通过调用 HTTPRequest::allParsed()),额外的 / 会导致差异,因此它 returns一个404.