是否可以通过$url_handlers
函数设置(ContentController's)init()
,如下所示?
public function init() {
parent::init();
$this::$url_handlers = array(
'' => 'index',
'$Project' => 'getProject'
);
}
我问,因为我没有得到调用的函数,而是获得404,而当以常规方式private static $url_handlers = ...
'硬编码'$ url_handlers时,代码工作正常并调用函数。< / p>
答案 0 :(得分:4)
$url_handlers
属性实际上是SilverStripe术语中的configuration property。这意味着当您刷新缓存清单时,将重建和缓存配置。
您可以从init
更新它,但您需要使用the configuration API来更新它,因为在调用init
方法时,配置清单已被解析。因此,修改self::$url_handlers
属性不会产生任何影响。
以下是一个例子:
public function init()
{
parent::init();
Config::inst()->update(
__CLASS__,
'url_handlers',
array(
'' => 'index',
'$Project' => 'getProject'
)
);
}
供参考,here's the point其中RequestHandler::findAction
查看定义的$url_handlers
值的配置清单。