EntityDrupalWrapper 클래스에서 파생 된 유형의 객체를 검사하는 좋은 방법이 있습니까?


38

이 질문이 다른 복잡한 객체 유형에 적용된다고 확신하지만 EntityDrupalWrapper현재 작업하고 있습니다. 이것은 entity_metadata_wrapper()(그리고 아마도 다른 것)에 의해 반환되는 객체의 유형입니다 .

다음과 같은 코드를 사용하는 경우 :

$order_wrapper = entity_metadata_wrapper('commerce_order', $order_object);
dpm($order_wrapper);

Devel의 출력은 너무 도움이되지 않습니다.

스크린 샷

dpm()예를 들어 stdClass객체 와 의 호출에 예상되는 것을 표시하지 않습니다 .

비슷한 호출로 dvm()객체를 인쇄하지만 익숙하지 않은 방식으로 읽을 수는 없습니다.

시도한 debug()결과 다음과 같은 PHP 사용자 통지가 생성됩니다.

스크린 샷 2

또한 해당 경고에 포함 된 HTML 출력 dvm()은 화면에 인쇄 되는 것과 동일한 출력입니다 .

이러한 유형의 객체를 검사하는 방법 (바람직하게는 Krumo 사용)을 통해 사용 가능한 속성을 확인할 수 있습니까? 아니면 사용하고 dvm()있습니까?


드루팔 7에 도입 디버그 () 시도
Shoaib 나와 즈

@ShuaibNawaz에게 감사드립니다. 비록 두렵지 만 성공하지 못했습니다 (질문을 업데이트했습니다)
Clive

2
그래, 그것은 래퍼 클래스의 문제 중 하나입니다. dpm () / krumo는 공용 속성 만 표시합니다. 랩퍼 클래스의 모든 내용은 보호되고 매직 __get () 및 __set () 메소드를 통해 액세스됩니다.
Berdir

@ Berdir 나는 그것을 두려워했다; 나는 보았다하지 않았하지만 같은 많은 냄새했다 __get()__set()참여했다. 어떤 래퍼에 사용할 수있는 클래스 속성을 찾는 선호되는 방법이 있습니까? 아니면 경험에 기초한 '알기'의 문제 일까?
Clive

1
@ Berdir 나는 당신이 이것에 대해 통보받을 것이라고 생각하지 않습니다, 당신은 사용할 수 있습니다 dpm($wrapper->getPropertyInfo());, 그것은 정말 도움이됩니다
Clive

답변:


38

dpm ($ wrapper-> getPropertyInfo ())를 사용하십시오.

이 글은 다음의 워드 프로세서 .


노드에서 특정 필드를 검사하기 위해 다음을 사용할 수 있습니다.kpr($wrapper->my_custom_field->value());
wranvaud

4

EntityDrupalWrapper 객체를 가지고 놀고있었습니다. debug ()는 일반적으로 __toString ()에 의해 준비된 출력을 반환합니다.

foreach를 사용하여 EntityDrupalWrapper 객체를 반복하고 속성 이름을 나열하는 데 도움이되었습니다.

foreach($order_wrapper as $name => $obj){
  debug($name);
  debug(get_class($obj)); //EntityValueWrapper
}

다음 $obj은 유형의 객체입니다.EntityValueWrapper

$ obj는 $ obj-> value ()로 읽을 수 있고 $ obj-> set ( 'value')로 쓸 수 있습니다.

편집하다:

두 번째 매개 변수를 전달하지 않고 랩퍼를 작성한 경우
즉 entity_metadata_wrapper ( 'commerce_order');
그런 다음 set 및 value 메소드는 구현되지 않으므로 예외가 발생합니다.


4

래퍼를 풀기 위해 작은 위젯을 작성했습니다.

function _wrapper_debug($w) {
  $values = array();
  foreach ($w->getPropertyInfo() as $key => $val) {
    $values[$key] = $w->$key->value();
  }
  return $values;
}

dpm(_wrapper_debug($some_object_wrapper));

누군가가 유용하다고 생각하기를 바랍니다.


3

검사 모듈이 디버깅 할 데이터의 좋은 구조보기를 제공합니다.

데이터베이스 로그 (보고서 / 최근 로그 메시지), 파일 또는 화면에 대한 유익하고 형식화 된 변수 덤프, 딥 스택 추적 및 실행 시간 프로파일을 확보하십시오.


3

랩퍼에 "전원을 공급하는"원래 오브젝트를 검사하려면 다음을 시도하십시오.

dpm($wrapper->raw())

이것은 나를 위해 잘 작동합니다.



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