Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Silverstripe自定义GridFieldExportButton的行为_Php_Silverstripe - Fatal编程技术网

Php Silverstripe自定义GridFieldExportButton的行为

Php Silverstripe自定义GridFieldExportButton的行为,php,silverstripe,Php,Silverstripe,在Silverstripe 3.3.1中,GridFieldExportButton似乎无法覆盖。在这种情况下,我使用的是userforms,我需要控制GridFieldExportButton中的函数,如generateExportFileData(),以改变某些行为,如在csv中使用字段标签作为字段名,并包括标记 我试过直接扩展 class SubmissionExportButton extends GridFieldExportButton 通过_config.php Object::

在Silverstripe 3.3.1中,GridFieldExportButton似乎无法覆盖。在这种情况下,我使用的是userforms,我需要控制GridFieldExportButton中的函数,如generateExportFileData(),以改变某些行为,如在csv中使用字段标签作为字段名,并包括
标记

我试过直接扩展

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

  • 我有时会遇到CMS缓存无法以与前端刷新一致的方式清除的问题,但在过去,我肯定必须运行它来进行某些调整。我甚至不得不多次刷新CMS,但通常是在我到达
    $utter\u fusion\u点
    或凌晨3点时:P


    我还检查了
    silverstripe/silverstripe用户表单
    ,以确保它们没有覆盖
    GridFieldExportButton
    -似乎没有,祝你好运,我希望这有帮助:)

    这真的是在做什么?在我看来,我们只是简单地扩展类,然后实例化它。就像,它是一个名字不同的子类。injector方法的优点是它确实扩展了现有类在相同名称下的行为,这意味着我可以更改behviour,而不必担心实例可能创建在何处。我(和upvoter)这样认为:)将模块与userforms一起安装,编辑模块以执行所需操作…更改其按钮行为。。。但是,如果我错了,可能会编辑您的问题以使其更清楚,或者只是等待其他答案(我可能刚刚误解了),那么,这里的部分问题是UserDefinedForm使用beforeUpdateCMSFields()将其所有字段添加到CMS布局中。这是一个令人困惑的安排,因为我不确定如何覆盖它。最后,我不得不几乎复制该代码(在GetCMSFields()函数中的/userforms/code/model/UserDefinedForm.php中找到)才能让它正常工作。我仍然不清楚执行的顺序,对此我很不高兴。但这是一个完全不同的讨论。就这个问题而言,我认为这个答案基本上是正确的,因为这个类必须被替换,因为它似乎不可能向它注入行为。不过,我希望能更清楚地解释为什么标准的扩展程序都不起作用。