Php SilverStripe通过init()设置控制器$url\u处理程序

Php SilverStripe通过init()设置控制器$url\u处理程序,php,silverstripe,Php,Silverstripe,是否可以通过init()函数设置(ContentController的)$url\u处理程序,如下所示 public function init() { parent::init(); $this::$url_handlers = array( '' => 'index', '$Project' => 'getProject' ); } 我之所以这样问,是因为没有调用函数,而是得到了404,而当以传统方式对$url\u处理程

是否可以通过
init()
函数设置(ContentController的)
$url\u处理程序
,如下所示

public function init() {
    parent::init();

    $this::$url_handlers = array(
        '' => 'index',
        '$Project' => 'getProject'
    );
}

我之所以这样问,是因为没有调用函数,而是得到了404,而当以传统方式对$url\u处理程序进行“硬编码”时,
私有静态$url\u处理程序=…
代码工作正常,函数被调用。

在SilverStripe术语中,
$url\u处理程序
属性实际上是一个简单的属性。这意味着在刷新缓存清单时,将重新生成并缓存配置

您可以从
init
更新它,但需要使用,因为在调用
init
方法时,配置清单已经被解析。因此,修改
self::$url\u handlers
属性不会产生任何效果

下面是一个例子:

public function init()
{
    parent::init();

    Config::inst()->update(
        __CLASS__,
        'url_handlers', 
        array(
            '' => 'index',
            '$Project' => 'getProject'
        )
    );
}

作为参考,其中
RequestHandler::findAction
查看定义的
$url\u handlers
值的配置清单。

属性
$url\u handlers
实际上是一个银条术语。这意味着在刷新缓存清单时,将重新生成并缓存配置

您可以从
init
更新它,但需要使用,因为在调用
init
方法时,配置清单已经被解析。因此,修改
self::$url\u handlers
属性不会产生任何效果

下面是一个例子:

public function init()
{
    parent::init();

    Config::inst()->update(
        __CLASS__,
        'url_handlers', 
        array(
            '' => 'index',
            '$Project' => 'getProject'
        )
    );
}
作为参考,其中
RequestHandler::findAction
查看定义的
$url\u handlers
值的配置清单