Попытка получить свойство необъекта при получении полей из ссылки на Term Entity в Drupal 8 - PullRequest
0 голосов
/ 25 апреля 2018

Я создаю XML-фид типа контента Biography, который имеет поля терминов Entity Reference.Я загружаю узел, загружаю поля Paragraph, затем использую Term :: load для загрузки объекта термина в поле абзаца, которое является термином по номеру идентификатора термина.Однако, когда я пытаюсь извлечь поля из самого термина, я не могу сделать это без добавления «Попытка получить свойство необъекта» в строках, где я использую -> name-> value.Поля успешно извлекаются и обрабатываются, ошибки просто приходят с ними.Попытка использовать метод -> getName () полностью прерывает фид.

private function xmlOutput($input) {
  $node = Node::load($input);
  $educationArray = $node->get('field_group_education');
  $educationOutput = [];
  foreach ($educationArray as $key => $value) {
    $educationGroupID = $node->get('field_group_education')[$key]->target_id;
    $educationGroup = Paragraph::load($educationGroupID);
    $honors = $educationGroup->get('field_academic_honors')->value;
    $degreeID = $educationGroup->get('field_degrees')->target_id;
    $degree = Term::load($degreeID)->name->value;
    $educationID = $educationGroup->get('field_education')->target_id;
    $schoolName = Term::load($educationID)->name->value;
    $yearGraduated = $educationGroup->get('field_year_graduated')->value;
    $educationRender = '<professionalEducation>
                        <order>' . $key  . '</order>
                        <school whereField="Name" whereValue="' . $schoolName . '" autoCreate="true"/>
                        <educationType whereField="Name" whereValue="' . $degree . '" autoCreate="true"/>
                        <yearGraduated>' . $yearGraduated . '</yearGraduated>
                        <degree whereField="Name" whereValue="' . $degree . '" autoCreate="true"/> . 
                        <honors>' . $honors . '</honors>
                        </professionalEducation>';
    array_push($educationOutput, $educationRender);
  }
  $compiled = [
    '<education>',
    implode($educationOutput),
    '</education>',
  ];
  return implode('', $compiled);

}

Это успешно отрисовывается

<education>
  <professionalEducation>
    <order>0</order>
    <school whereField="Name" whereValue="education term 1" 
    autoCreate="true"/>
    <educationType whereField="Name" whereValue="AA" autoCreate="true"/>
    <yearGraduated>1990</yearGraduated>
    <degree whereField="Name" whereValue="AA" autoCreate="true"/>
    <honors>Honors 1</honors>
  </professionalEducation>
  <professionalEducation>
    <order>1</order>
    <school whereField="Name" whereValue="education term 2" autoCreate="true"/>
    <educationType whereField="Name" whereValue="AB" autoCreate="true"/>
    <yearGraduated>2000</yearGraduated>
    <degree whereField="Name" whereValue="AB" autoCreate="true"/>
    <honors>honors 2</honors>
  </professionalEducation>
</education>

Но я получаю ошибки PHP, которые "пытаютсяполучить свойство необъектного "для строк с -> name-> value, которое я пытался использовать -> getName (), но это немедленно выдает ошибку 500.Использование isset для проверки наличия значения также не сработало для того, чтобы заставить getName () работать.

$degree = '';
if(isset(Term::load($degreeID)->name->value)) {
  $degree = $degreeObject->name->value;
}

Работает, но ошибки остаются

$degree = '';
if(isset(Term::load($degreeID)->getName())) {
  $degree = $degreeObject->getName();
}

Выдает ошибку 500, но также избавляется от ошибки

1 Ответ

0 голосов
/ 26 апреля 2018

Проверьте target_id isset().Измените ваш код, как показано ниже

  $educationGroup = $value->entity;
  $honors = isset($educationGroup->field_academic_honors->target_id) ? $educationGroup->field_academic_honors->value : '';
  $degree = isset($educationGroup->field_degrees->target_id) ? $educationGroup->field_degrees->entity->name->value : '';
  $schoolName = isset($educationGroup->field_education->target_id) ? $educationGroup->field_education->entity->name->value : '';
  $yearGraduated = isset($educationGroup->field_year_graduated->target_id) ? $educationGroup->field_year_graduated->value : '';

Не нужно загружать абзац и Term каждый раз, когда вы можете получить их со ссылкой entity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...