从自定义表单中提取/获取UploadField提交的图像 - > Silverstripe 3.1

时间:2015-07-17 03:16:42

标签: image forms file silverstripe

使用 UploadField 进行编程时遇到了一个小问题。我已创建页面以在FrontEnd上创建一个轻型CMS。但我不知道如何将此图像检索到页面«更新»。

“创建”页面中有代码:

$uploadField = new UploadField( 'ImageEvenement', 'Image' );

我试图为“更新»

页面工作的代码
$evenID = Session::get('evenementID');
$evenement = Versioned::get_by_stage('PageCalendrierEvenement', 'Stage')->byID($evenID);
..
$SavedImage = File::get()->byID($evenement->ImageEvenementID)
$uploadField = new UploadField( 'ImageEvenement', 'Image', $SavedImage );

如何将提交的图片检索到 $ SavedImage ?我从文件中获取ID的想法不起作用。

另一种方法:

$SavedImage = $evenement->ImageEvenement();

如果我从$ SavedImage转储数据我正在查看:

Image Object
(
    [destroyed] => 
    [model:protected] => DataModel Object
        (
            [customDataLists:protected] => Array
                (
                )

        )

    [record:protected] => Array
        (
            [ClassName] => Image
            [Created] => 2015-07-15 14:41:24
            [LastEdited] => 2015-07-16 15:03:25
            [Name] => images.jpg
            [Title] => images
            [Filename] => assets/Membres/9/calendrier/images.jpg
            [ShowInSearch] => 1
            [ParentID] => 15
            [OwnerID] => 9
            [ID] => 22
            [RecordClassName] => Image
        )

    [changed:DataObject:private] => Array
        (
        )

    [original:protected] => Array
        (
            [ClassName] => Image
            [Created] => 2015-07-15 14:41:24
            [LastEdited] => 2015-07-16 15:03:25
            [Name] => images.jpg
            [Title] => images
            [Filename] => assets/Membres/9/calendrier/images.jpg
            [ShowInSearch] => 1
            [ParentID] => 15
            [OwnerID] => 9
            [ID] => 22
            [RecordClassName] => Image
        )

    [brokenOnDelete:protected] => 
    [brokenOnWrite:protected] => 
    [components:protected] => 
    [unsavedRelations:protected] => 
    [sourceQueryParams:protected] => 
    [failover:protected] => 
    [customisedObject:protected] => 
    [objCache:ViewableData:private] => Array
        (
        )

    [class] => Image
    [extension_instances:protected] => Array
        (
            [BetterButtonDataObject] => BetterButtonDataObject Object
                (
                    [owner:protected] => 
                    [ownerBaseClass:protected] => DataObject
                    [ownerRefs:Extension:private] => 0
                    [class] => BetterButtonDataObject
                )

            [SiteTreeFileExtension] => SiteTreeFileExtension Object
                (
                    [owner:protected] => 
                    [ownerBaseClass:protected] => File
                    [ownerRefs:Extension:private] => 0
                    [class] => SiteTreeFileExtension
                )

            [Hierarchy] => Hierarchy Object
                (
                    [markedNodes:protected] => 
                    [markingFilter:protected] => 
                    [_cache_numChildren:protected] => 
                    [owner:protected] => 
                    [ownerBaseClass:protected] => File
                    [ownerRefs:Extension:private] => 0
                    [class] => Hierarchy
                )

        )

    [beforeExtendCallbacks:protected] => Array
        (
        )

    [afterExtendCallbacks:protected] => Array
        (
        )

)

有什么想法吗?

class PageCalendrierEvenement extends Page {

    private static $db = array(
        "Titre" => "Varchar(50)",
        "DateDepart" => "Date",
        "DateFin" => "Date",
    );

    private static $has_one = array(
        'Creator' => 'Member',
        'ImageEvenement' => 'Image',
    );

..
}

谢谢!

3 个答案:

答案 0 :(得分:1)

有一个关系需要" ID"关系名称中的后缀(因为它保存到db ...),例如

<div>{{session.CurrentSession.CURRENT_USER}}</div>

然后它应该自动保存。

或者,我为单一关系做了什么:

$uploadField = new UploadField( 'ImageEvenementID', 'Image', $SavedImage );
希望有所帮助。

答案 1 :(得分:1)

我的代码工作正常,但不干净,不使用SilverStripe函数类。将图像保存到数据对象的非工作原因是因为我没有使用:

$form->saveInto($evenement)

我想感谢你Wmk给我一个get方法,用另一个post填充表单的值:

$form->loadDataForm($evenement)

最后,现在一切正常!

答案 2 :(得分:0)

经过长时间的大脑搜索,我找到了诀窍!与UploadField一起使用的命令是 setValue($ value),其中包含 fileIDs 。我的最终代码是:

$evenement = Versioned::get_by_stage('PageCalendrierEvenement', 'Stage')->byID($evenID);

...

$uploadField = new UploadField( 'ImageEvenement', 'Image' );

$data['ImageID'] = $evenement->ImageEvenement()->ID; 

$fileIDs[]=$data['ImageID'];
$uploadField->setValue(array('Files' => $fileIDs));

多数民众赞成!