web-dev-qa-db-ja.com

ImageItem :: presave()のnullに対するメンバー関数getFileUri()の呼び出し

D6-> D8移行の一部としてノードの移行があり、ノードのイメージフィールドについて、個別のファイルの移行を行った後、ノードの移行でファイルの移行を参照して、宛先fidを作成し、それを画像フィールドに書き込みます。

field_image:
  plugin: iterator
  source: field_thumbnail
  process:
    target_id:
      plugin: migration
      migration: file
      source: fid

私が遭遇している問題は、タイトルにリストされているエラーです。これはpresave()関数です:

public function preSave() {
  parent::preSave();

  $width = $this->width;
  $height = $this->height;

  // Determine the dimensions if necessary.
  if (empty($width) || empty($height)) {
    $image = \Drupal::service('image.factory')->get($this->entity->getFileUri());
    if ($image->isValid()) {
      $this->width = $image->getWidth();
      $this->height = $image->getHeight();
    }
  }
}

次の行で死んでいるため、そのノードのイメージがないため、死んでいるようです。

$image = \Drupal::service('image.factory')->get($this->entity->getFileUri());

ノードのイメージがある場合は問題なく動作します。ファイルの移行で画像が見つからない場合、これをスキップしてはいけませんか?このエラーを回避するために使用できる.ymlファイルに構成オプションはありますか?

ありがとう。

UPDATE:私は skip_on_emptyプロセスプラグインのこのドキュメントページ を見つけ、そのページで提案されているように実装しました:

field_image:
  plugin: iterator
  source: field_thumbnail 
    process:
    target_id:
    -
      plugin: migration
      migration: file
      source: fid
    -
      plugin: skip_on_empty
      method: row

しかし、パイプラインではskip_on_emptyプラグインに到達する前にすでにエラーが発生しているため、同じエラーが発生します。しかし、私が物事を切り替える場合:

field_image:
  plugin: iterator
  source: field_thumbnail 
    process:
    target_id:
    -
      plugin: skip_on_empty
      method: row
    -
      plugin: migration
      migration: file
      source: fid

その後、画像がない場合はブログノード全体がスキップされます。イメージがない場合、イメージの移行をスキップする方法を教えてください。

3
wonder95

以前の移行で同様の問題が発生しましたが、 コアの問題 が原因でエラーが発生することがあります。

パッチが送信されました 私の場合の問題を修正しました。

1
gerzenstl