1

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 时它会保存到“实时”。

4

0 回答 0