SilverStripe 3:模块可以扩展mysite / code / Page.php吗?

时间:2014-11-10 17:16:59

标签: module extend silverstripe

下午好,

我不知道我想做什么是可能的,所以这里也是如此。

我有一个扩展Page_Controller的模块,但我想通过站点根目录访问某些功能 例如:getMyDataObjectList();
目前,只有我通过正常的MVC路由结构才能工作。

我发现当我将函数'getMyDataObjectList'放在'/mysite/code/Page.php'中时它可以工作。

问题是,我不想把代码放在那里。我希望它与我的自定义模块捆绑在一起,但工作方式与在'mysite / code / Page.php'中一样

[示例场景]

网站根目录: http:// [somesite] .com
默认情况下,会加载“ Page.ss ”模板 我希望主题开发人员能够在任何模板/布局页面中调用我的模块函数(API),并从站点根目录返回结果 目前,这只有在我将“API”函数移动到'/mysite/code/Page.php'时才有效 如果代码在我的模块中,则仅在您转到时返回数据:
的http:// [somesite]的.com / [module_controller]

这可以实现吗?如果是这样,怎么样?

谢谢你的帮助。

[更新 - 代码解决方案]

///>MyExtension.php
class MyExtension extends Extension{
    public function getMyDataObjectList(){
         return 'object list goes here!';
    }
}//class

///>[Module] => _config.php
Object::add_extension('Page_Controller', 'MyExtension');

和往常一样,我做一个(/ dev / build?flush = 1)以防万一。 谢谢:'simon_w'

1 个答案:

答案 0 :(得分:1)

是的,这是相对简单的。简单地说,使用您的方法创建一个Extension子类,然后将其添加到Page_ControllerExtension子类与DataExtension几乎完全相同,它们只适用于DataObjects以外的类。