我尝试制作一个简单的字母存储:
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;保存"我无法在"附加档案中看到它"字段。
答案 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'
);