在 SilverStripe 中上传文件
File uploading in 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';
}
但是在管理界面创建新信件时我无法附加文件:我可以上传它,但是按下按钮后 "Save" 我在 "Attached Files" 中看不到它场.
您的 UploadField
应该使用您在 DataObject
上的关系。在你的情况下,那将是 'LetterFiles'
:
$uploader = UploadField::create('LetterFiles', 'Attached Files')
另一件小事:我强烈建议您不要使用 File
subclasses 来自定义文件关系。它仅在您直接上传文件时有效,如果您在 CMS 中的其他位置上传文件(例如资产管理员)并希望使用 "Choose existing" 对话框 link 它们,那么它'会失败的。
我建议您只删除 LetterFiles
class 并在 DataObject
上使用 many_many
关系。示例:
// Change from this…
private static $has_many = array (
'LetterFiles' => 'LetterFiles'
);
// … to this:
private static $many_many = array (
'LetterFiles' => 'File'
);
我尝试做一个简单的字母存储:
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';
}
但是在管理界面创建新信件时我无法附加文件:我可以上传它,但是按下按钮后 "Save" 我在 "Attached Files" 中看不到它场.
您的 UploadField
应该使用您在 DataObject
上的关系。在你的情况下,那将是 'LetterFiles'
:
$uploader = UploadField::create('LetterFiles', 'Attached Files')
另一件小事:我强烈建议您不要使用 File
subclasses 来自定义文件关系。它仅在您直接上传文件时有效,如果您在 CMS 中的其他位置上传文件(例如资产管理员)并希望使用 "Choose existing" 对话框 link 它们,那么它'会失败的。
我建议您只删除 LetterFiles
class 并在 DataObject
上使用 many_many
关系。示例:
// Change from this…
private static $has_many = array (
'LetterFiles' => 'LetterFiles'
);
// … to this:
private static $many_many = array (
'LetterFiles' => 'File'
);