【问题标题】:Silverstripe add UploadField to ModelAdmin failedSilverstripe 将 UploadField 添加到 ModelAdmin 失败
【发布时间】:2016-08-31 23:13:48
【问题描述】:

我正在尝试通过在 GridFieldList 之后创建扩展来将 UploadField 添加到 ModelAdmin。但我总是收到错误“在第 161 行的 ..../framework/forms/FormField.php 中调用非对象的成员函数 FormAction()”。我可以毫无问题地添加 TextField、DropdownField,但 UploadField 没有运气。 我错过了什么吗?

<code>
    class MyExtension extends Extension{
        public static $has_one = array(
            'ImportCSV' => 'File'
        );
        public function updateEditForm($form){
            $fields = $form->Fields();
            $fields->push(
                new TextField('Title', 'Title')
            );//This one works
            $fields->push(
                new UploadField('ImportCSV', 'Import CSV')
            );//This one not working
        }
    }
</code>

【问题讨论】:

    标签: php silverstripe modeladmin


    【解决方案1】:

    如果您正在编写Extension(特别是DataExtension),那么您将使用updateCMSFields($fields),它通过引用传递FieldList 的实例。

    但是要添加 UploadField 我认为你想要的,要么将它添加到扩展(装饰)FileDataExtension 在调用 updateCMSFields() 或更改 extends Extensionextends DataExtension 在你上面的例子,然后运行dev/build flush=all

    【讨论】:

    • 谢谢,@theruss。我对扩展感到困惑。实际上,我正在尝试在 ModelAdmin 页面上添加一个 UploadField 和一个 Button。当用户上传一个CSV并点击按钮时,它会修改DB中的一些记录。那么在这种情况下,您有什么建议吗?
    • 我想我明白你在做什么是的。尝试使用已有的内容并对其进行修改:复制ReportAdmin 并重命名。删除除getEditForm() 之外的所有内容,然后使用您的自定义字段和逻辑修改 that。更好的是修改ModelAdmin 的内置上传CSV 表单(参见CsvBulkLoader 类)并根据您的需要进行修改。 silverstripe.org 上有几个很好的教程涵盖了这类事情。但与往常一样,您需要跳出框框思考,以适应本质上是其他人的想法,并将它们融入您正在尝试做的事情中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    相关资源
    最近更新 更多