Silverstripe $ url_handlers无法正常运行 - 运行方法但也会触发404错误

时间:2017-01-26 00:51:41

标签: php routing silverstripe

我的控制器的$ 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中测试

1 个答案:

答案 0 :(得分:1)

从网址格式中删除尾随的/

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

HTTPRequest::match()检查模式时,它会将其与explode('/', $pattern)分开。当/稍后验证在URL中遇到模式的所有部分(通过调用RequestHandler::handleRequest())时,额外的HTTPRequest::allParsed()会导致出现差异,因此它会返回404