1

Zend MVC 응용 프로그램을 개발 중입니다.Zend MVC - 일부 테스트 디버그 출력을 표시하지만 suppresed로 표시되지 않습니다.

때로는 신속하고 지저분한 디버깅을 위해 텍스트를 일부 에코로 표시하는 경우가 있습니다. 예컨대

<?php 
class MyClass {} 
echo('hello world - yes this script is included'); 

텍스트가 내 모델 또는 컨트롤러가 출력에 렌더링되지 않는에서 반향 때 나는 내 부트 스트랩에서 '디버그 텍스트를'에코> 그러나 수 있습니다.

나는 '출력을 모두' '렌더링 뷰가 아닌 스크립트'를 억제하는 설정 곳이있다 젠드 1.9.5을 사용하고


MVC

와 젠드 레이아웃을 사용하고?

+0

는 당신이 실제로 응용 프로그램에 MyClass에 파일을 포함하거나, MyClass에 인스턴스화있다() 애플리케이션의 어디서나 객체로 사용할 수 있습니까? – Mark

+0

나는 둘 다하고있다. 파일을 먼저 포함하고 텍스트를 출력하는지 확인하기 위해 페이지를 새로 고치고 클래스를 객체로 인스턴스화하는 경우도 있습니다. 이것은 실제로 '일부 디버그 텍스트'의 예입니다. 지금까지 모든 답변자에게 –

+0

- 감사합니다. 나는이 제안을 시도 할 것입니다. –

답변

0

나는 10 개월 후 같은 코드로 되돌아 왔기 때문에 나는이 질문에 답하고있다. 그리고 그것은 나를 다시 혼란스럽게 만들었다.

기본 모듈, 색인 컨트롤러 및 색인 작업의 컨텍스트에 있습니다. 에코 된 텍스트가 바로 표시되지 않는 한 -

class IndexController extends Zend_Controller_Action 
{ 

public function indexAction() 
    { 
    //home page 
    echo '<h1>hello world</h1>'; 

    //set the special home page layout 
    $this->_helper->layout()->setLayout('home-page'); 
    } 

문제가되었다

나는 코드에서 무슨 일이 벌어지고 있는지 확인하기 위해 빠른 방법으로 몇 가지 간단한 텍스트를 에코 싶었다.

다른 컨트롤러에서 작동했지만이 컨트롤러는 작동하지 않습니다. 나를 미치게 만들었다.

지금 - 문제를 해결했습니다.

저는이 특정 컨트롤 액션 인 '홈페이지 레이아웃'을 위해 특별한 레이아웃을 사용하고있었습니다.

내 홈 페이지 레이아웃에서 뷰 스크립트를 렌더링하지 않았습니다. 모든 콘텐츠와 디자인이 레이아웃에 포함되었습니다. 홈 페이지는 특별하고 고유 한 페이지이므로 2 단계보기로 분리 할 필요가 없습니다. 이런 이유로 나는 뷰 스크립트가 필요한 이유가 없었습니다. 그러나 ZF가 불평하는 것을 막기 위해 'views \ scripts \ index \ index.phtml'을 만들었습니다. 그러나 나는 레이아웃에서 렌더링하지 않았습니다. 왜냐하면 필요하지 않았기 때문입니다.

모든 에코 출력은 layout()->content ('기본'응답 세그먼트에서 레이아웃에 의해 자동 할당 됨)에 캡처됩니다. 세그먼트를 반향 출력하지 않았기 때문에 에코 텍스트가 표시되지 않는 것처럼 동작합니다.

문제를 해결하려면 콘텐츠 세그먼트를 반향 출력했는지 확인해야했습니다.

<html> 
<head> 
... 
</head> 
<body> 
... my home page html... 
<?php echo $this->layout()->content ?> 
... my home page html... 
</body> 
</html> 

내 디버그 텍스트가 너무 반향되는과 ... 같은 렌더링 것이다 :

... my home page html... 
<h1>hello world</h1> 
... my home page html...  
0

viewRendering이 켜져 있다면, 아마도/scripts/뷰를 렌더링하고 echo 문을 표시하지 않을 수도 있습니다.

주어진 컨트롤러에서 viewRendering을 끄고 그 도움이되는지 확인할 수 있습니다.

1

echo() 대신 die()를 사용할 수도 있습니다. :) 작동합니다. 또는 다음과 같이 Zend_Log 및 출력 작성기를 사용하십시오.

$writer = new Zend_Log_Writer_Stream('php://output'); 
+0

yep die()는 속임수를 사용하여 나를 빨리 제거합니다. –

+0

하지만 callstact를 가져 와서 "die"가 호출 된 위치를 가져온 다음 (level-2이어야 함) Form_Contact :: init() : line 56 : NULL과 같은 내용을 echo하는 함수를 사용하는 것이 좋습니다. 디버거없이 확장 디버깅을 수행 할 때 이러한 호출을 쉽게 제거 할 수 있습니다. :) –

1

출력 버퍼링이 원인 일 수 있습니다. 시도 :

echo 'my debug output'; 
flush(); 
관련 문제