Php Silverstripe自定义GridFieldExportButton的行为
在Silverstripe 3.3.1中,GridFieldExportButton似乎无法覆盖。在这种情况下,我使用的是userforms,我需要控制GridFieldExportButton中的函数,如generateExportFileData(),以改变某些行为,如在csv中使用字段标签作为字段名,并包括Php Silverstripe自定义GridFieldExportButton的行为,php,silverstripe,Php,Silverstripe,在Silverstripe 3.3.1中,GridFieldExportButton似乎无法覆盖。在这种情况下,我使用的是userforms,我需要控制GridFieldExportButton中的函数,如generateExportFileData(),以改变某些行为,如在csv中使用字段标签作为字段名,并包括标记 我试过直接扩展 class SubmissionExportButton extends GridFieldExportButton 通过_config.php Object::
标记 我试过直接扩展
class SubmissionExportButton extends GridFieldExportButton
通过_config.php
Object::add_extension('GridFieldExportButton', 'SubmissionExportButton');
class SubmissionExportButton extends Extension{}
并通过喷油器
class SubmissionExportButton extends GridFieldExportButton{}
Injector:
GridFieldExportButton:
class: SubmissionExportButton
我甚至尝试完全替换类并扩展UserDefinedForm,但他的结果出乎意料。最好是简单地控制所讨论的类,但正确的过程是什么?我会复制其中的方法来创建一个新组件,取消注册默认组件,然后注册它。Injector应该非常适合这种情况,所以只需仔细检查您的过程: ~/mysite/\u config/config.yml
Injector:
GridFieldExportButton:
class: SubmissionExportButton
~/mysite/code/SubmissionExportButton.php
class SubmissionExportButton extends GridFieldExportButton
{
public function generateExportFileData($gridField)
{
// override here, retain return types!
}
// etc...
}
然后:
~/dev/build/?flush
~/admin/pages/?flush
$utter\u fusion\u点
或凌晨3点时:P
我还检查了
silverstripe/silverstripe用户表单
,以确保它们没有覆盖GridFieldExportButton
-似乎没有,祝你好运,我希望这有帮助:)这真的是在做什么?在我看来,我们只是简单地扩展类,然后实例化它。就像,它是一个名字不同的子类。injector方法的优点是它确实扩展了现有类在相同名称下的行为,这意味着我可以更改behviour,而不必担心实例可能创建在何处。我(和upvoter)这样认为:)将模块与userforms一起安装,编辑模块以执行所需操作…更改其按钮行为。。。但是,如果我错了,可能会编辑您的问题以使其更清楚,或者只是等待其他答案(我可能刚刚误解了),那么,这里的部分问题是UserDefinedForm使用beforeUpdateCMSFields()将其所有字段添加到CMS布局中。这是一个令人困惑的安排,因为我不确定如何覆盖它。最后,我不得不几乎复制该代码(在GetCMSFields()函数中的/userforms/code/model/UserDefinedForm.php中找到)才能让它正常工作。我仍然不清楚执行的顺序,对此我很不高兴。但这是一个完全不同的讨论。就这个问题而言,我认为这个答案基本上是正确的,因为这个类必须被替换,因为它似乎不可能向它注入行为。不过,我希望能更清楚地解释为什么标准的扩展程序都不起作用。