2010-01-08 19 views
1

Je développe une application Zend MVC.Zend MVC - Je fais écho à une sortie de débogage de test mais elle semble être supprimée et ne s'affiche pas

Parfois, j'aime faire de l'écho de texte juste pour le débogage rapide et sale. par exemple

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

J'echo « debug texte » dans mon bootstrap> Mais, lorsque le texte est repris dans mon modèle ou les contrôleurs il n'est pas rendue dans la sortie.

J'utilise Zend 1.9.5 et en utilisant la mise en page avec Zend MVC


Est-il un endroit qui est mise en Supprimant tout « » scénario non-vue rendu « » sortie?

+0

êtes-vous, y compris en fait le fichier MyClass dans votre application, ou instanciation MyClass() comme un objet n'importe où dans votre application? – Mark

+0

Je fais les deux. Inclure le fichier en premier et actualiser une page pour voir si le texte est sorti et parfois aussi instancier la classe en tant qu'objet. C'était vraiment juste un exemple de «texte de débogage». –

+0

à tous les répondeurs jusqu'à présent - merci, je vais essayer ces suggestions sur –

Répondre

0

Je réponds à cette question parce que je suis revenu au même code, 10 mois plus tard, et il me confondre à nouveau.

J'étais dans le contexte d'un module par défaut, d'un contrôleur d'index et d'une action d'index.

Je voulais faire écho à un texte simple comme un moyen rapide de voir ce qui se passait dans le code:

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'); 
    } 

problème était - le texte fait écho était tout simplement pas présenter.

Cela a fonctionné dans d'autres contrôleurs, mais pas celui-ci. Ça me rendait fou.

Maintenant, j'ai résolu le problème. J'utilisais une disposition spéciale pour cette action de contrôle particulière ... une «mise en page d'accueil».

Dans ma mise en page d'accueil, je ne restituais aucun script de vue. Tout le contenu et le design étaient dans la mise en page. Étant donné que la page d'accueil est une page spéciale et unique, il n'était pas nécessaire de séparer en une vue en deux étapes. Pour cette raison, je n'avais aucune raison d'avoir besoin d'un script de vue. Mais, j'ai créé un 'views \ scripts \ index \ index.phtml' pour empêcher ZF de se plaindre. Je ne l'ai cependant pas rendu dans ma mise en page - car ce n'était pas nécessaire.

Toute sortie renvoyée en écho est capturée dans le layout()->content (automatiquement affectée par la mise en page du segment de réponse 'par défaut'). Parce que je ne faisais pas écho à ce segment, il se comportait comme si le texte écho était supprimé.

Pour résoudre le problème, je devais simplement m'assurer que je reproduisais le segment de contenu.

-à-dire

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

qui, avec mon texte de débogage étant repris aussi ... viderait que:

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

Si viewRendering est activé, il recherche probablement la vue/scripts/pour afficher et éventuellement ne pas afficher vos instructions d'écho.

Vous pouvez essayer d'arrêter viewRendering du contrôleur donné et voir si cela aide.

viewRenderer->setNoRender() 
1

Vous pouvez également utiliser die() au lieu d'echo :) cela fonctionnera. Ou utilisez Zend_Log et l'éditeur de sortie comme ceci:

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

yep die() fait l'affaire et me fait l'enlever assez rapidement aussi. –

+0

mais il est préférable d'avoir une fonction qui prend le callstact et récupère l'emplacement où le "die" a été appelé (devrait être de niveau 2), puis echo quelque chose comme 'Form_Contact :: init(): ligne 56: NULL' Ce qui facilite la suppression de ces appels lors d'un débogage étendu sans débogage :) –

1

La mise en mémoire tampon de sortie peut être le coupable. Essayez:

echo 'my debug output'; 
flush();