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
.
我的控制器 $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
.