【问题标题】:Silverstripe $url_handlers not working - runs method but also triggers a 404 errorSilverstripe $url_handlers 不工作 - 运行方法但也触发 404 错误
【发布时间】:2017-01-26 00:51:40
【问题描述】:

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

【问题讨论】:

标签: php routing silverstripe


【解决方案1】:

从 URL 模式中删除尾随 /

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多