Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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)_Php_Silverstripe - Fatal编程技术网

Php 上传时调用数据对象函数(SilverStripe)

Php 上传时调用数据对象函数(SilverStripe),php,silverstripe,Php,Silverstripe,我有一个名为AdminUpload的数据对象类,它存储两个变量:UploadDate(总是将赌注设置为当前日期)和Total,这是一个int 调用函数updateUploads(),存储当前日期,并在每次调用时将总数增加1 <?php class AdminUpload extends DataObject { private static $db = array( 'UploadDate' => 'Date', 'Total' =>

我有一个名为
AdminUpload
的数据对象类,它存储两个变量:
UploadDate
(总是将赌注设置为当前日期)和
Total
,这是一个int

调用函数
updateUploads()
,存储当前日期,并在每次调用时将
总数增加1

<?php

class AdminUpload extends DataObject {

    private static $db = array(
        'UploadDate' => 'Date',
        'Total' => 'int'
    );

    // Tell the datagrid what fields to show in the table
    private static $summary_fields = array(
        'ID' => 'ID',
        'UploadDate' => 'Current Date',
        'Total' => 'Version Number'
    );

    public function updateUploads(){
        $uploadDate = SS_Datetime::now();
        $this->UploadDate = $uploadDate;
        $this->Total++;//increment the value currently stored in the database each time

        $this->write();
    }

我从来没有在SilverStripe中尝试过这样的函数调用——这似乎很简单,但由于我不打算在每次调用updateUploads()函数时向数据库中添加一个新条目,因此我遇到了麻烦。任何提示都会有帮助…

只为一条记录创建一个完整的表是不正确的方法。如果您打算在一个页面上使用这两个字段,那么将它们添加到该页面(创建新的页面类型)将是一个更好的主意

若您谈论的是文件上传,那个么您总是可以直接从数据库查询这些信息

$uploadedFilesCount = File::get()->count();
$lastUploadedFileDate = File::get()->sort('CreatedDate', 'DESC')->first()->CreatedDate;
onAfterWrite
是一个钩子,用于
DataExtension
。有些情况下,钩子直接在DO上调用,然后在扩展上调用

要处理“onCreated”状态,扩展代码可能如下所示:

class UploadsCounter extends DataExtension {
    protected $isCreating = false;

    public function onBeforeWrite() {
       if (!$this->owner->isInDB()) {
           $this->isCreating = true;
       }
    }

    // called on validation or database error
    public function onAfterSkippedWrite() {
        $this->isCreating = false;
    }

    public function onAfterWrite() {
        if (!$this->isCreating) return;

        $this->isCreating = false;
        $adminUploading = AdminUpload::get()->first();

        if (!$adminUploading ) {
            $adminUploading = new AdminUpload();
            $adminUploading->write();
        }

        $adminUploading->updateUploads();
    }
}
您应该在要计数的数据对象上定义
uploadsCenter
扩展名,例如:

mysite/_config/config.yml

File:
  extensions:
    - UploadsCounter

仅为一条记录创建整个表是不正确的方法。如果您打算在一个页面上使用这两个字段,那么将它们添加到该页面(创建新的页面类型)将是一个更好的主意

若您谈论的是文件上传,那个么您总是可以直接从数据库查询这些信息

$uploadedFilesCount = File::get()->count();
$lastUploadedFileDate = File::get()->sort('CreatedDate', 'DESC')->first()->CreatedDate;
onAfterWrite
是一个钩子,用于
DataExtension
。有些情况下,钩子直接在DO上调用,然后在扩展上调用

要处理“onCreated”状态,扩展代码可能如下所示:

class UploadsCounter extends DataExtension {
    protected $isCreating = false;

    public function onBeforeWrite() {
       if (!$this->owner->isInDB()) {
           $this->isCreating = true;
       }
    }

    // called on validation or database error
    public function onAfterSkippedWrite() {
        $this->isCreating = false;
    }

    public function onAfterWrite() {
        if (!$this->isCreating) return;

        $this->isCreating = false;
        $adminUploading = AdminUpload::get()->first();

        if (!$adminUploading ) {
            $adminUploading = new AdminUpload();
            $adminUploading->write();
        }

        $adminUploading->updateUploads();
    }
}
您应该在要计数的数据对象上定义
uploadsCenter
扩展名,例如:

mysite/_config/config.yml

File:
  extensions:
    - UploadsCounter