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
,它无法查找父文件夹。