2016-10-29 1 views
0

Drupal에서 엔티티를 처리하기 위해 엔티티 메타 데이터 래퍼 ("Drupal way")를 사용하고 있습니다.Drupal, entity_metadata_wrappers 및 디버깅

코딩을 시작하고 그것이 가지고있는 모든 이점을보기가 정말 쉽습니다 ... 치명적인 오류가 발생했을 때와 어디서 오는 것인지 확실하지 않은 경우를 제외하고는.

EntityMetadataWrapperException : 알 수없는 데이터 속성 field_whatever을

이 데이터베이스 로그를 보여줍니다 것입니다. EntityStructureWrapper-> getPropertyInfo() (줄 335 /var/www/html/sites/all/modules/entity/includes/entity.wrapper.inc).

슬프게도, "field_whatever는" "꾸벅 꾸벅", "UID"또는 매우 일반적인 속성이며, 그래서 이름이 모든 오류의 근원에 도착하는 나를 어렵게 내 코드를 통해 확산되고 있다고 여러 번 .

나는 현재이 일을 해요 :

  • 코드의 작은 조각을 쓰기 무언가가 실패하면 볼 실행합니다.
  • "너무 일반적이지 않은"필드가있는 항목을 처리 할 때 getPropertyInfo 사용.
  • 모발을 잃어버린 것.

최악의 경우는 코딩 할 때 오류가 표시되지 않지만 일주일 후에 표시된다는 것입니다. 그래서 그것은 어디서나있을 수 있습니다 ...

엔티티 메타 데이터 래퍼 오류를 더 잘 처리 할 수있는 방법이 있습니까? 데이터베이스 로그뿐만 아니라 회선에서 더 나은 정보를 얻을 수 있습니까? 아마도 역 추적일까요?

감사합니다.

답변

1

음, (STABLE) 모듈을 가진 활성 우리가 우리의 모듈 내부 같은 것을 할 수 있습니다 (다만 좋은 krumo 메시지를 볼 수) : 엔티티에 의해 던져진 예외의 역 추적 오류를 반환합니다

<?php 

set_exception_handler('exception_with_trace'); 

function exception_with_trace($e) 
{ 
    dpm($e->getTrace()); 
} 

다음 페이지로드시 메타 데이터 핸들러 (모든 것이 잘 실행되는 사이트의 일부 페이지).

또한 예외 처리기를 일부 페이지 또는 일부 역할을 가진 일부 사용자에게만 독점적으로 더 우아하게 설정할 수 있습니다 ... 또는 URL의 일부 매개 변수가 충족되거나 Drupal 사이트의 일부 상태가 충족 될 때 예 : bool 영구 변수 'exception_with_trace'가 true 일 때). 특정 조건과 제어 하에서도 프로덕션 환경에서 사용할 수 있습니다.

사이트가 "전혀"작동하지 않으면 settings.php 파일에 사이트를 포함시킬 수 있지만 추적을 인쇄하는 대신 파일에 추적을 작성하고 다른 상황에서 추적을 관찰해야합니다. 드루팔 (Drupal하지만 일부 PHP 파일).

예외가 너무 길어서 메모리 문제가 발생하면 추적을 문자열로 가져 오는 것도 가능합니다. http://php.net/manual/es/exception.gettraceasstring.php

호프를 참조하십시오.