SilverStripe通过init()设置控制器$ url_handler

时间:2016-12-21 18:35:54

标签: php silverstripe

是否可以通过$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>

1 个答案:

答案 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值的配置清单。