在SilverStripe中上传文件

时间:2017-08-03 13:20:36

标签: silverstripe

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

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')
    )
    ...
  }
}

LetterFiles.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';
}

但是当在管理界面中创建一个新的字母时,我无法附加文件:我可以上传它,但按下按钮后#34;保存"我无法在"附加档案中看到它"字段。

1 个答案:

答案 0 :(得分:2)

您的UploadField应该使用DataObject上的关系。在您的情况下,那将是'LetterFiles'

$uploader = UploadField::create('LetterFiles', 'Attached Files')

另一个小问题:我强烈建议您不要将File子类用于自定义文件关系。它只会在您直接上传文件时工作,如果您在CMS中的其他位置上传文件(例如资产管理员)并希望使用"选择现有"对话框,然后它就会失败。

我建议您删除LetterFiles课程,并在many_many上使用DataObject关系。例如:

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

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