在SilverStripe中上载文件

在SilverStripe中上载文件,silverstripe,Silverstripe,我尝试制作一个简单的字母存储: Letter.php: class Letter extends DataObject { private static $db = array ( 'DateUpload' => 'Date', 'LetterNumber' => 'Text', 'Theme' => 'Text', 'Sender' => 'Text', 'SendTo' => 'Text' ); pri

我尝试制作一个简单的字母存储:

Letter.php:

class Letter extends DataObject 
{
  private static $db = array (
    'DateUpload' => 'Date',
    'LetterNumber' => 'Text',
    'Theme' => 'Text',
    'Sender' => 'Text',
    'SendTo' => 'Text'  
  );

  private static $has_many = array (
    'LetterFiles' => 'LetterFiles'
  );

  public function getCMSFields(){
    $fields = FieldList::create (
      TextField::create('Theme','Theme'),
      DropdownField::create('Sender','Sender'),
      ...
      $uploader = UploadField::create('FileName','Attached Files')
    )
    ...
  }
}
lettfiles.php:

class LetterFiles extends File 
{
  private static $has_one = array (
    'LetterOfFile' => 'Letter'
  );
}
LetterAdmin.php:

class LetterAdmin extends ModelAdmin 
{
  private static $managed_models = array (
    'Letter'
  );
  private static $menu_title = 'Letters';
  private static $url_segment = 'letters';
}

但是,在管理界面中创建新信函时,我无法附加文件:我可以上载它,但按下“保存”按钮后,我无法在“附加文件”字段中看到它。

您的
上载字段应使用您在
数据对象上的关系。在您的情况下,这将是
'LetterFiles'

$uploader = UploadField::create('LetterFiles', 'Attached Files')
另一件小事:我强烈建议不要使用
File
子类来定制文件关系。只有当您直接上传文件时,它才起作用。如果您在CMS中的其他地方上传文件(如资产管理员),并希望使用“选择现有”对话框链接文件,那么它将失败

我建议您删除
lettfiles
类,并在
DataObject
上使用
many\u many
关系。例如:

// Change from this…
private static $has_many = array (
    'LetterFiles' => 'LetterFiles'
);

// … to this:
private static $many_many = array (
    'LetterFiles' => 'File'
);

您的
UploadField
应该使用您在
数据对象上的关系。在您的情况下,这将是
'LetterFiles'

$uploader = UploadField::create('LetterFiles', 'Attached Files')
另一件小事:我强烈建议不要使用
File
子类来定制文件关系。只有当您直接上传文件时,它才起作用。如果您在CMS中的其他地方上传文件(如资产管理员),并希望使用“选择现有”对话框链接文件,那么它将失败

我建议您删除
lettfiles
类,并在
DataObject
上使用
many\u many
关系。例如:

// Change from this…
private static $has_many = array (
    'LetterFiles' => 'LetterFiles'
);

// … to this:
private static $many_many = array (
    'LetterFiles' => 'File'
);

谢谢你,bumzak!这对我很有帮助,谢谢你,bumzak!这对我有帮助。