entity_metadata_wrapper를 사용하여 새 값을 배열 인 엔티티 필드에 저장하십시오.


9

엔티티의 필드에 새 값을 저장해야하고 entity_metadata_wrapper를 사용할 수 있는지 또는 기존 값을 설정할 수 있는지 궁금합니다.


이것이 내가 $ wrapper-> vimn_related_subjects-> set (array ($ key)) 값을 설정 한 방법입니다. 그러나 배열 끝에 값을 추가하려면? 가능합니까?
앤드류 웰치

당신은 시도 했습니까 $wrapper->vimn_related_subjects[] = $value;?
Clive

답변:


31

다중 값 필드를 처리 할 때 연관된 엔티티 메타 데이터 랩퍼 오브젝트는 EntityListWrapper 의 인스턴스입니다 (사용 가능한 메소드 를 보려면 API를 찾아 보는 것이 좋습니다. 또한이 클래스는 ArrayAccess 인터페이스를 구현합니다 )

따라서 EntityListWrapper에 새 값을 추가하는 가장 간단한 방법은 "[]"연산자를 사용하는 것입니다.

$wrapper->field_example[] = $new_value;

새 항목을 작성하고 값을 지정합니다. 이 방법을 사용하면 델타 (값 목록 내의 오프셋)가 자동으로 생성됩니다. 원하는 경우 오프셋을 직접 설정할 수도 있습니다. 다음 세 가지 방법 중 하나가 동일합니다.

$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);

세 가지 경우 모두 델타가 이미 존재하면 값을 덮어 쓰고 그렇지 않으면 새 항목을 만듭니다.

필드 자체에 값 배열을 직접 설정할 수도 있습니다. 두 방법 모두 동일합니다.

$value = array
  0 => array('property_example' => 'hello'),
  1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);

그러나이를 위해서는 필드의 메타 데이터 래퍼를 사용하지 않으므로 할당 할 필드의 내부 구조를 알아야합니다.

마지막으로 다중 값 필드를 빈 값으로 설정하여 비울 수 있습니다. 세 가지 방법 모두 동일합니다.

$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;

"EntityMetadataWrapperException : EntityStructureWrapper-> getPropertyInfo ()의 알 수없는 데이터 속성 배열입니다."특정 언어를 타겟팅하고 있지만 두 번째 방법을 시도하고 있습니다. 즉, $ wrapper-> language ($ lang)-> {$ field}-> set ($ new_array);
AlxVallejo

$w->field_allowed_regions->set(array(null));다중 값 분류법 참조 필드에서 작동 한 유일한 지우기 옵션입니다.
놀라운

3

나는 그것을 발견했다

$wrapper->field_example[]->set($new_value);

치명적인 실패였습니다. 그러나

$wrapper->field_example[NULL]->set($new_value);

허용되었다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.