在SilverStripe中上载文件
我尝试制作一个简单的字母存储: Letter.php:在SilverStripe中上载文件,silverstripe,Silverstripe,我尝试制作一个简单的字母存储: Letter.php: class Letter extends DataObject { private static $db = array ( 'DateUpload' => 'Date', 'LetterNumber' => 'Text', 'Theme' => 'Text', 'Sender' => 'Text', 'SendTo' => 'Text' ); pri
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!这对我有帮助。