Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Voilà un message sur le blog de Matthew Weier O'Phinney qui indique comment contribuer au ZF2 :
http://weierophinney.net/matthew/archiv … l#extended
S'il y a des amateurs, n'hésitez pas à vous manifester !
A+, Philippe
Hors ligne
Il semble qu'il y ai une erreur dans ton lien, celui-ci fonctionne :
http://weierophinney.net/matthew/archiv … l#extended
Hors ligne
Bonjour
S'il y a un contributeur ans la salle voici la classe Debug.php que Zend à mis dans ZF2
<?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_Debug * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ /** * @namespace */ namespace Zend; /** * Concrete class for generating debug dumps related to the output source. * * @category Zend * @package Zend_Debug * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Debug { /** * @var string */ protected static $_sapi = null; /** * Get the current value of the debug output environment. * This defaults to the value of PHP_SAPI. * * @return string; */ public static function getSapi() { if (self::$_sapi === null) { self::$_sapi = PHP_SAPI; } return self::$_sapi; } /** * Set the debug ouput environment. * Setting a value of null causes Zend_Debug to use PHP_SAPI. * * @param string $sapi * @return void; */ public static function setSapi($sapi) { self::$_sapi = $sapi; } /** * Debug helper function. This is a wrapper for var_dump() that adds * the <pre /> tags, cleans up newlines and indents, and runs * htmlentities() before output. * * @param mixed $var The variable to dump. * @param string $label OPTIONAL Label to prepend to output. * @param bool $echo OPTIONAL Echo output if true. * @return string */ public static function dump($var, $label=null, $echo=true) { // format the label $label = ($label===null) ? '' : rtrim($label) . ' '; // var_dump the variable into a buffer and keep the output ob_start(); var_dump($var); $output = ob_get_clean(); // neaten the newlines and indents $output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output); if (self::getSapi() == 'cli') { $output = PHP_EOL . $label . PHP_EOL . $output . PHP_EOL; } else { if(!extension_loaded('xdebug')) { $output = htmlspecialchars($output, ENT_QUOTES); } $output = '<pre>' . $label . $output . '</pre>'; } if ($echo) { echo($output); } return $output; } }
l'idée est d'encapsuler var_dump pour que le développeur puis afficher sa variable sans altérer le fonctionnement de ZF
Dès la version 1.0 avec un collègue j'avais porté une classe faisant la même chose que nous avions dans un dans un framework à nous en php4
Cette classe ne propose pas dump mais show et las ou les paramètres de la classe de zend sont $var et $label et $echo ceux de la notre sont $message, $value, $echo
elle sont donc très proche.
mais là où celle de Zend fait un simple var_dump affiché dans un tag <pre> avec le label
la notre affiche la structure de donnée mais aussi des informations sur l'exécution
elle tien compte de la présence de fireBug ou du fait que la sortie est en JSON
enfin la classe est piloté par un switch qui permets de ne plus afficher les debugs on pu donc oublier des appel au débug sans craindre de voir des informations de dev s'afficher en production.
<?php /** * Affichage formattÈ de n'importe quel objet ou variable. * * @example Fast_Debug::show('mon message', $mavariable); * * @package Fast * @copyright ftgroup * @author Jean Yves Terrien * @author Patrick Dubois */ class Fast_Debug { private static $_styled = false; private static $_display = false; private static $_debugStarted = false; /** * Affichage structurÈ d'une variable, quel que soit son type. * Cet affichage embarque sa propre feuille de style mais qu'une seule * fois pour l'ensemble des appels successifs ‡ cette mÈthode. * Tous les styles sont gÈrÈs dans un DIV.Debug, aussi assurez-vous de * ne pas utiliser une classe de style nommÈe '.Debug' sur un 'DIV' de * vos propres affichages. * * Notification de l'affichage au reste de l'application par une * constante membre statique valorisÈe ‡ true, car cet affichage va * bloquer les envois de header et donc le mÈcanisme de session. * Les mÈthodes qui gËrent ces mÈcanismes pourront en tenir compte * en appelant Fast_Debug::isStarted(); * * @param message string message ‡ afficher avant la valeur * @param value mixed variable (ou expression) ‡ Èvaluer * @param value boolean affiche ou retourn la trace de debug. */ public static function show($message, $value=NULL, $echo=true) { $mime = 'text/html'; if (class_exists('Zend_Controller_Front')) { $controller = Zend_Controller_Front::getInstance(); if ($controller->getResponse()) { $firePHP = preg_match('|FirePHP|', $controller->getRequest()->getHeader('User-Agent')); foreach ($controller->getResponse()->getHeaders() as $header) { if ('Content-Type' == $header['name']) { if (preg_match('|^([^/]+/[^;]+).*$|', $header['value'], $matches)) { $mime = $matches[1]; } } } } } if (!self::$_display) return false; self::start(); if (isset($firePHP)&&$firePHP) { include_once('FirePHPCore/fb.php'); if (class_exists('FB')) { ob_start(); FB::trace($message); FB::log($value, $message); ob_end_clean(); return; } } $trace = debug_backtrace(); $fichier = basename($trace[0]["file"]); $ligne = $trace[0]["line"]; $print_trace = create_function('$trace, $mime',' unset($trace[0]); //concerne myErrorHandler sans importance $disp = null; if (count($trace) > 0) { if ("text/html" == $mime) { $disp = "<ul class=\"caller\">"; foreach ($trace as $k=>$entry) { $disp .= "<li class=\"caller\">Appel de : <b>"; if (isset($entry["class"])) { $disp .= $entry["class"] . "::" . $entry["function"]; } else { $disp .= $entry["function"]; } $disp .= "()</b>"; if (isset($entry["file"])) { $disp .= "<br>dans <i>"; $disp .= $entry["file"]; $disp .= ":" . $entry["line"]; $disp .= "</i>"; } $disp .= "</li>" . PHP_EOL; } $disp .= "</ul>"; } else { $disp = ""; foreach ($trace as $k=>$entry) { if (isset($entry["class"])) { $disp .= $entry["class"] . "::" . $entry["function"] . "()"; } else { $disp .= $entry["function"] . "()"; } if (isset($entry["file"])) { $disp .= " => " . $entry["file"] . ":" . $entry["line"] . PHP_EOL; } else { $disp .= PHP_EOL; } //$disp[$call] = $in; } //$disp = print_r($disp, true); } } return $disp; '); // fin de la fonction dynamique $print_msg = create_function('$type, $msg, $mime',' if ("text/html" == $mime) { return \'<span class="\' . $type . \'">\' . $msg . \'</span>\'; } else { return $msg; }' ); if ('text/html' == $mime) { $disp = self::_presetStyles(); $disp .= PHP_EOL . PHP_EOL . '<!-- DEBUG -->' . PHP_EOL . '<div class="Debug">' . PHP_EOL . '<pre>' . PHP_EOL; $intro = '<div class="file">Dans ' . $fichier . ":" . $ligne . "</div>"; } else { $disp = '/*' . PHP_EOL; $intro = 'Dans ' . $fichier . ":" . $ligne . PHP_EOL; } if (is_object($value)) { $disp .= $intro . $print_msg('message', $message, $mime) . ' => '; $disp .= print_r($value, true); $disp .= $print_trace($trace, $mime); } elseif (is_array($value)) { $disp .= $intro . $print_msg('message', $message, $mime) . ' => '; $disp .= print_r($value, true); $disp .= $print_trace($trace, $mime); } elseif (is_bool($value)){ $disp .= $intro . $print_msg('message', $message, $mime) . ' => ' . ucfirst(gettype($value)) . PHP_EOL; if ($value) { $value = 'True'.PHP_EOL; } else{ $value = 'False'.PHP_EOL; } $disp .= '{' . PHP_EOL . ' [] => ' . $value . '}' . PHP_EOL; $disp .= $print_trace($trace, $mime); } elseif (is_null($value)){ $disp .= $intro . $print_msg('stabilo', $message, $mime); $disp .= $print_trace($trace, $mime); } elseif (is_string($value) && is_file($value)) { $disp .= $intro . $print_msg('message', $message, $mime) . ' => File' . PHP_EOL; $disp .= '{' . PHP_EOL . ' [] => ' . $value . PHP_EOL . '}' . PHP_EOL; } else { $disp .= $intro . $print_msg('message', $message, $mime) . ' => ' . ucfirst(gettype($value)) . PHP_EOL; $disp .= '{' . PHP_EOL . ' [] => ' . $value . PHP_EOL . '}' . PHP_EOL; $disp .= $print_trace($trace, $mime); } if ('text/html' == $mime) { $disp .= '</pre>' . PHP_EOL . '</div>' . PHP_EOL . '<!-- fin DEBUG -->' . PHP_EOL . PHP_EOL; } else { $disp .= '*/' . PHP_EOL; } if (!$echo) return $disp; echo $disp; } // fin function dump private static function _presetStyles() { if (!self::$_styled) { // on n'Ècrit une section style qu'une seule fois sur le flux courant // quel que soit le nombre d'appels ‡ cette mÈthode. $styles = '' . PHP_EOL . '<style>' . PHP_EOL . '/* styles pour Debug */' . PHP_EOL . 'div.Debug {text-align:left; }' . PHP_EOL . 'div.Debug pre {padding:3px; color:#333333; background-color:#DDDDDD; font-family: mono; font-size: 9pt; line-height:10pt;}' . PHP_EOL . 'div.Debug .file {color:#666666; font-style:italic; padding-bottom:5px;}' . PHP_EOL . 'div.Debug .message {color:#006600;}' . PHP_EOL . 'div.Debug .stabilo {background-color:yellow; padding-left:3px; padding-right:3px;}' . PHP_EOL . 'div.Debug .caller {color:#003399; list-style:square; margin:8px; line-height:9pt;}' . PHP_EOL . 'div.Debug pre strong em {color:#993300;}' . PHP_EOL . '/* fin styles pour Debug */' . PHP_EOL . '</style>' . PHP_EOL; self::$_styled = true; return $styles; } return ''; } public static function displayDebug($mode = null) { if (null !== $mode) self::$_display = $mode; return self::$_display; } private static function start() { if (!self::$_debugStarted) self::$_debugStarted = true; } public static function isStarted() { return self::$_debugStarted; } } // fin class Fast_Debug
Je suis près si ça intéresse à prêter main fort pour l'intégrer à ZF2
Mais je ne pense pas avoir le temps de le faire moi même.
Il existe de la doc sur son utilisation.
A+JYT
Hors ligne