Silverstripe 4 项目有一个扩展页面,它会在保存时自动生成一个“MetaImage”,然后应该将其附加到页面上。下面的示例代码:
class ExamplePage extends \Page
{
private static $has_one = [
'MetaImage' => 'SilverStripe\Assets\Image'
];
public function onBeforeWrite()
{
if ($this->MetaImageID == 0) {
$metaObjectImage = new Image();
$metaObjectImage->setFromLocalFile($tmpFolder.'/'.$fileName);
$metaObjectImage->ParentID = $saveFolder->ID;
$metaObjectImage->Title = $this->Title;
$metaObjectImage->write();
$metaObjectImage->doPublish();
$this->MetaImageID = $metaObjectImage->ID;
}
parent::onBeforeWrite();
}
}
然而,图像被连接到“舞台”版本,而不是“现场”版本。MetaImageID 更新在ExamplePage
数据库中的表中,而不是ExamplePage_Live
表中。
我猜问题是$this->MetaImageID = $metaObjectImage->ID;
没有正确设置关系,但我不确定如何更改它,因此在发布 ExamplePage 时它会保存到“实时”。