Silverstripe-使模块从自定义页面类型扩展的最佳方法

Chr*_*ner 1 php extends silverstripe

我的网站结构是所有自定义页面类型,具有从Page.php扩展的单个父页面。

class CustomPage extends Page {}

class  Custom_Controller extends Page_Controller {
    //load all javascript/css for entire site here etc
}


class SomeClass extends CustomPage {}

class SomeClass_Controller extends Custom_Controller
{
    // etc etc you get the point. 
}
Run Code Online (Sandbox Code Playgroud)

现在,站点中的所有其他页面分别从CustomPage和Custom_Controller扩展。Page.php几乎是空的。

现在,使用未在内部编写的模块时就会出现问题。例如,Blog *模块将不会继承新基类Custom_Controller中定义的javascripts / css / functions,因为它被设置为扩展Page_Controller。

从根本上使Blog_Controller扩展Custom_Controller而不修改Blog模块的理想方法是什么?

*博客模块只是一个例子。这适用于所有模块。

小智 5

对直接问题的简短回答

What is the ideal method here for basically making Blog_Controller extend Custom_Controller without modifying the Blog module?

在技​​术上不可能做到这一点。实际上,您有两种选择;

  1. 直接对Page / Page_Controller类进行更改
  2. 继承自定义页面类型中的Page / Page_Controller,而不是直接修改Page,而是使用绑定到Page的扩展为所有子页面类型提供自定义行为。对于提供自定义init()行为的特定情况,您需要一个自定义扩展来扩展Extension类并绑定到Page_Controller

查看扩展文档以获取更多信息