不知道在哪里寻找这个。我想对使用composer添加到我网站的Silverstripe模块进行更改,但是我不希望在稍后更新模块时覆盖自定义代码。
如何在不编辑核心文件的情况下对某些代码进行一些更改?有问题的代码位于控制器中的函数中。
答案 0 :(得分:4)
这绝对取决于你的情况。
Extension
(请参阅Simon的
回答)$this->extend('functionName')
,您可以修改内容
在您的分机functionName()
中
但有时它是一个 bug或模块没有提供你可以使用的钩子,那么你有 将该类子类化并告诉SilverStripe使用您的子类:
class MySubClass extends SomeClass
{
public function doSomething()
$something = parent::doSomething();
//your changes
return $something;
}
}
您只需要在子类中进行更改和覆盖方法,无需复制子类中的所有内容。这样,您将在以后获得大多数模块更新。
然后您需要配置Injector以在config.yml中使用MySubClass
而不是SomeClass
:
Injector:
SomeClass:
class: MySubClass
答案 1 :(得分:1)
您可以对其进行自己的扩展,例如class MyModuleExtension extends Extension
并覆盖/编辑/更改代码。
在config.yml
中,注册新的扩展名,如下所示:
OriginalController:
extensions:
- MyModuleExtension