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