【问题标题】:Put/Get UploadField submitted image from custom Form -> Silverstripe 3.1从自定义表单放置/获取 UploadField 提交的图像-> Silverstripe 3.1
【发布时间】:2015-10-06 16:56:46
【问题描述】:

我在使用 UploadField 进行编程时遇到了一个小问题。我创建了页面以在前端制作轻量级 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 ?我从 File 中获取 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',
    );

..
}

谢谢!

【问题讨论】:

  • 您能粘贴页面和数据对象的相关 $db 和 $has_one 部分吗?图片与当前页面有什么关系?
  • 好的,我已经粘贴到上面的代码中了。谢谢!
  • 类 PageCalendrierEvenement 扩展 Page { private static $db = array( "Titre" => "Varchar(50)", "DateDepart" => "Date", "DateFin" => "Date", ); private static $has_one = array('Creator' => 'Member', 'ImageEvenement' => 'Image', ); .. }

标签: image forms file silverstripe


【解决方案1】:

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

$uploadField = new UploadField( 'ImageEvenementID', 'Image', $SavedImage );

那么它应该会自动保存。

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

$imageField = UploadField::create('ImageEvenement', 'Image');
$imageField->setAllowedFileCategories('image');
$imageField->setAllowedMaxFileNumber(1);

希望有帮助。

【讨论】:

  • 将 ID 添加到 ImageEvenement 不起作用,当我提交表单时,我收到“服务器错误”消息...但是您消息的第二部分帮助我解决了另一个问题 ;)
  • 对我的问题稍微精确一点。从上传字段添加图像并将其存储到数据库中。我的问题是在自定义更新“事件”页面上显示/检索该图像以上传字段。所有字段都出现在字段上,但不是上传字段......我希望我的英语不是那么糟糕;)提前谢谢!
【解决方案2】:

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

$form->saveInto($evenement)

我要感谢 Wmk 给我 get 方法来用另一个 post 上的值填写表单:

$form->loadDataForm($evenement)

最后,现在一切正常!

【讨论】:

    【解决方案3】:

    经过长时间的大脑搜索,我终于找到了窍门!与 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));
    

    就是这样!

    【讨论】:

      猜你喜欢
      • 2013-01-06
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 2018-07-03
      • 2014-03-18
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      相关资源
      最近更新 更多