Module Silverstripe-对模块的自定义更改
不知道去哪里找这个。我想对使用composer添加到站点的Silverstripe模块进行更改,但我不希望在稍后更新模块时覆盖自定义代码Module Silverstripe-对模块的自定义更改,module,silverstripe,Module,Silverstripe,不知道去哪里找这个。我想对使用composer添加到站点的Silverstripe模块进行更改,但我不希望在稍后更新模块时覆盖自定义代码 如何在不编辑核心文件的情况下对某些代码进行一些更改?所讨论的代码位于控制器中的函数中。您可以对其进行自己的扩展,例如类MyModuleExtension extension 并覆盖/编辑/更改其中的代码 在config.yml中,按如下方式注册新扩展名: OriginalController: extensions: - MyModuleExten
如何在不编辑核心文件的情况下对某些代码进行一些更改?所讨论的代码位于控制器中的函数中。您可以对其进行自己的扩展,例如
类MyModuleExtension extension
并覆盖/编辑/更改其中的代码
在config.yml
中,按如下方式注册新扩展名:
OriginalController:
extensions:
- MyModuleExtension
您可以对其进行自己的扩展,例如,
classmymoduleextension扩展
并覆盖/编辑/更改其中的代码
在config.yml
中,按如下方式注册新扩展名:
OriginalController:
extensions:
- MyModuleExtension
这完全取决于你的情况
- 如果要添加一些自定义方法,请使用
(请参阅Simon的 (答复)扩展名
- 如果要添加一些数据库字段或关系,请使用DataExtension 他是你的朋友吗
- 如果模块是可扩展的并提供挂钩,则
可以更改(您猜到了)扩展中的行为。寻找
在模块中,您可以修改内容 在扩展中的方法$this->extend('functionName')
中functionName()
class MySubClass extends SomeClass
{
public function doSomething()
$something = parent::doSomething();
//your changes
return $something;
}
}
您只需要在子类中进行更改和重写方法,无需复制子类中的所有内容。这样,以后您将获得大多数模块更新
然后,您需要将Injector配置为使用config.yml中的MySubClass
而不是SomeClass
:
Injector:
SomeClass:
class: MySubClass
这完全取决于你的情况
- 如果要添加一些自定义方法,请使用
(请参阅Simon的 (答复)扩展名
- 如果要添加一些数据库字段或关系,请使用DataExtension 他是你的朋友吗
- 如果模块是可扩展的并提供挂钩,则
可以更改(您猜到了)扩展中的行为。寻找
在模块中,您可以修改内容 在扩展中的方法$this->extend('functionName')
中functionName()
class MySubClass extends SomeClass
{
public function doSomething()
$something = parent::doSomething();
//your changes
return $something;
}
}
您只需要在子类中进行更改和重写方法,无需复制子类中的所有内容。这样,以后您将获得大多数模块更新
然后,您需要将Injector配置为使用config.yml中的MySubClass
而不是SomeClass
:
Injector:
SomeClass:
class: MySubClass
可能值得注意的是,在某些情况下,什么也做不了,例如,您要修改的类不扩展对象(或不调用其构造函数),因此不可扩展,并且直接实例化,例如
新建SomeClass
,而不是可注入的,例如SomeClass::create()
——在本例中(很少)除了对模块进行PR之外,您根本不能做很多事情,以使其首先可扩展。可能值得注意的是,在某些情况下,什么也做不了,例如,您要修改的类不扩展对象(或不调用其构造函数)因此不可扩展,直接实例化,例如newsomeclass
,而不是可注入的,例如SomeClass::create()
——在这种情况下(很少)除了对模块进行PR以使其首先可扩展之外,您无法做很多事情。值得注意的是,扩展类只能扩展类的公共API,不能使用它们覆盖任何现有方法。值得注意的是,扩展类只能扩展类的公共API,不能使用它们覆盖任何现有方法s