Php Silverstripe—使模块从自定义页面类型扩展的最佳方法
我的站点结构是所有自定义页面类型,具有从page.php扩展而来的单亲页面Php Silverstripe—使模块从自定义页面类型扩展的最佳方法,php,silverstripe,extends,Php,Silverstripe,Extends,我的站点结构是所有自定义页面类型,具有从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 ex
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.
}
站点中的每一个其他页面现在分别从CustomPage和Custom_Controller扩展。php几乎是空的
现在,当使用非内部编写的模块时,问题就来了。例如,Blog*模块将不会继承新基类Custom_Controller中定义的javascripts/css/函数,因为它被设置为扩展Page_Controller
基本上,在不修改Blog模块的情况下,让Blog_控制器扩展自定义_控制器的理想方法是什么
*博客模块只是一个例子。这适用于所有模块。直接问题的简短答案 基本上,在不修改Blog模块的情况下,让Blog_控制器扩展自定义_控制器的理想方法是什么 这在技术上是不可能做到的。实际上,你有两个选择 直接对页面/页面控制器类进行更改 在自定义页面类型中继承页面/页面控制器,但不要直接修改页面,而是使用绑定到页面的扩展为所有子页面类型提供自定义行为。对于提供自定义init行为的特定情况,您需要一个扩展扩展类的自定义扩展,并绑定到Page_控制器
查看直接问题的简短答案,了解更多信息 基本上,在不修改Blog模块的情况下,让Blog_控制器扩展自定义_控制器的理想方法是什么 这在技术上是不可能做到的。实际上,你有两个选择 直接对页面/页面控制器类进行更改 在自定义页面类型中继承页面/页面控制器,但不要直接修改页面,而是使用绑定到页面的扩展为所有子页面类型提供自定义行为。对于提供自定义init行为的特定情况,您需要一个扩展扩展类的自定义扩展,并绑定到Page_控制器
查看更多信息不幸的是,由于我们的环境,选项一是不可能的,选项二似乎也不起作用。我从未遇到过通过扩展向控制器添加getter方法的问题,但在init位于扩展中时却没有任何运气。然而,似乎有效的方法是对Blog_控制器进行子类化,并复制所需的函数-然而,这不是一个非常优雅的解决方案…对于扩展,您需要定义的方法是onBeforeInit或onAfterInit而不是init本身进一步添加到Marcus的建议中-似乎为了让onAfter/BeforeInit加载需求,您需要先用requirements::clear清除之前加载的内容。我不确定这是否是我的环境所独有的,或者我是如何加载的,但是的……不幸的是,由于我们的环境,选项一是不可能的,选项二似乎也不起作用。我从未遇到过通过扩展向控制器添加getter方法的问题,但在init位于扩展中时却没有任何运气。然而,似乎有效的方法是对Blog_控制器进行子类化,并复制所需的函数-然而,这不是一个非常优雅的解决方案…对于扩展,您需要定义的方法是onBeforeInit或onAfterInit而不是init本身进一步添加到Marcus的建议中-似乎为了让onAfter/BeforeInit加载需求,您需要先用requirements::clear清除之前加载的内容。我不确定这是否是我的环境所独有的,或者我是如何加载的,但是是的。。。