SilverStripe图像数据对象在创建后不可用

SilverStripe图像数据对象在创建后不可用,silverstripe,Silverstripe,我有一段代码,它根据添加到文件系统但尚未在数据库中的新文件创建新映像: $image = Image::create(); $image->Filename = 'assets/Art/e3434cc7-d348-491a-9dc8-325af3d9086d.jpg'; $image->write(); $images = Image::get(); $image = $images->last(); $vd = new ViewableData(); $ad = new

我有一段代码,它根据添加到文件系统但尚未在数据库中的新文件创建新映像:

$image = Image::create();
$image->Filename = 'assets/Art/e3434cc7-d348-491a-9dc8-325af3d9086d.jpg';
$image->write();

$images = Image::get();
$image = $images->last();

$vd = new ViewableData();
$ad = new ArrayData(array(
   'Image' => $image
));
$strHTML = $vd->customise($ad)->renderWith('Art');
Art.ss仅包含
$Image.SetWidth(100)

忽略查询不按ID或其他方式查找的事实。。。如果我在创建后从数据库中检索图像,为什么图像仅渲染为
$strHTML
?如果我删除下面的代码,
$strHTML
为空:

$images = Image::get();
$image = $images->last();

有一个setter可用,因此单独使用它可能会有所帮助,但您可能还需要将父文件夹的ID分配给对象:

$pFolder = Folder::find_or_make('Art');
if ($pFolder) {
    $image->setParentID($pFolder->ID);
    $image->setFilename('assets/Art/e3434cc7-d348-491a-9dc8-325af3d9086d.jpg');
}

什么是
var\u转储($image)
$Image.Debug
(在模板中)给您提供了什么?图像对象?图像文件存在吗?资产/艺术品/可写入Web服务器吗?你刷新了吗?
var_dump($image)
$image->write()
之后抛出一个图像对象,但是由于某种原因,Filename属性是
assets/e34343cc7-d348-491a-9dc8-325af3d9086d.jpg
而不是
assets/Art/e343434cc7-d348-d348-325af3d9086d.jpg
。还有其他一些区别:。左文档是在写入后创建的,右文档是在写入后直接创建的,然后从数据库中检索。这是两个不同的图像,因为它们设置了不同的ID,请参见$record array。。。如何将文件复制到资产?我想知道为什么会创建另一个文件…我刚刚运行了上面的脚本两次,所以它创建了两个图像。第一次在
$image->write()之后使用var_dump()'d
,在
$image=$images->last()之后的第二个。看起来是一个。基本上就像@Jono提到的那样,没有为记录设置
ParentID
,当您调用write时,它会调用
getRelativePath
,它无法查找父文件夹。