public function upgrade()
 {
     if (!in_array('sfPropelPlugin', $this->configuration->getPlugins())) {
         if (file_exists($file = sfConfig::get('sf_config_dir') . '/propel.ini')) {
             $this->getFilesystem()->remove($file);
         }
         return;
     }
     if (file_exists($old = sfConfig::get('sf_lib_dir') . '/filter/base/BaseFormFilterPropel.class.php') && !file_exists($new = sfConfig::get('sf_lib_dir') . '/filter/BaseFormFilterPropel.class.php')) {
         $this->getFilesystem()->rename($old, $new);
     }
     if (file_exists($file = sfConfig::get('sf_config_dir') . '/propel.ini')) {
         // use phing to parse propel.ini
         sfPhing::startup();
         $this->properties = new Properties();
         $this->properties->load(new PhingFile($file));
         $modified = $original = file_get_contents($file);
         $modified = $this->upgradePropelIni($modified, self::$removes, false);
         $modified = $this->upgradePropelIni($modified, self::$inserts, true);
         if ($original != $modified) {
             $this->logSection('propel', 'Upgrading ' . sfDebug::shortenFilePath($file));
             file_put_contents($file, $modified);
         }
     }
 }
 /**
  * Converts an array to HTML.
  *
  * @param string $id     The identifier to use
  * @param array  $values The array of values
  *
  * @return string An HTML string
  */
 protected function formatArrayAsHtml($id, $values)
 {
     $id = ucfirst(strtolower($id));
     return '
 <h2>' . $id . ' ' . $this->getToggler('sfWebDebug' . $id) . '</h2>
 <div id="sfWebDebug' . $id . '" style="display: none"><pre>' . htmlspecialchars(sfYaml::dump(sfDebug::removeObjects($values)), ENT_QUOTES, sfConfig::get('sf_charset')) . '</pre></div>
 ';
 }
 /**
  * Converts an array to HTML.
  *
  * @param string $id      The identifier to use
  * @param array  $values  The array of values
  *
  * @return string An HTML string
  */
 protected function formatArrayAsHtml($id, $values)
 {
     $id = ucfirst(strtolower($id));
     return '
 <h2>' . $id . ' <a href="#" onclick="sfWebDebugToggle(\'sfWebDebug' . $id . '\'); return false;"><img src="' . $this->webDebug->getOption('image_root_path') . '/toggle.gif" alt="Toggle details" /></a></h2>
 <div id="sfWebDebug' . $id . '" style="display: none"><pre>' . htmlspecialchars(sfYaml::dump(sfDebug::removeObjects($values)), ENT_QUOTES, sfConfig::get('sf_charset')) . '</pre></div>
 ';
 }
 public function upgrade()
 {
     $specVersion = sfYaml::getSpecVersion();
     $queue = array();
     $success = true;
     $finder = sfFinder::type('file')->name('*.yml')->prune('vendor');
     foreach ($finder->in(sfConfig::get('sf_root_dir')) as $file) {
         // attempt to upgrade booleans
         $original = file_get_contents($file);
         $upgraded = sfToolkit::pregtr($original, array('/^([^:]+: +)(?:on|y(?:es)?|\\+)(\\s*(#.*)?)$/im' => '\\1true\\2', '/^([^:]+: +)(?:off|no?|-)(\\s*(#.*)?)$/im' => '\\1false\\2'));
         try {
             sfYaml::setSpecVersion('1.1');
             $yaml11 = sfYaml::load($original);
             sfYaml::setSpecVersion('1.2');
             $yaml12 = sfYaml::load($upgraded);
         } catch (Exception $e) {
             // unable to load the YAML
             $yaml11 = 'foo';
             $yaml12 = 'bar';
         }
         if ($yaml11 == $yaml12) {
             if ($original != $upgraded) {
                 $this->getFilesystem()->touch($file);
                 file_put_contents($file, $upgraded);
             }
         } else {
             $this->logSection('yaml', 'Unable to upgrade ' . sfDebug::shortenFilePath($file), null, 'ERROR');
             // force project to use YAML 1.1 spec
             if ('1.1' != $specVersion) {
                 $specVersion = '1.1';
                 $class = sfClassManipulator::fromFile(sfConfig::get('sf_config_dir') . '/ProjectConfiguration.class.php');
                 $original = $class->getCode();
                 $modified = $class->wrapMethod('setup', 'sfYaml::setSpecVersion(\'1.1\');');
                 if ($original != $modified && $this->askConfirmation(array('Unable to convert YAML file:', sfDebug::shortenFilePath($file), '', 'Would you like to force YAML to be parsed with the 1.1 specification? (Y/n)'), 'QUESTION_LARGE')) {
                     $this->logSection('yaml', 'Forcing YAML 1.1 spec');
                     $this->getFilesystem()->touch($class->getFile());
                     $class->save();
                 } else {
                     $this->logBlock(array('Unable to either upgrade YAML files or force 1.1 spec.', '(see UPGRADE_TO_1_3 file for more information)'), 'ERROR_LARGE');
                 }
             }
             $success = false;
         }
     }
     if ($success && '1.1' == $specVersion) {
         $file = sfConfig::get('sf_config_dir') . '/ProjectConfiguration.class.php';
         $original = file_get_contents($file);
         $modified = preg_replace('/^\\s*sfYaml::setSpecVersion\\(\'1\\.1\'\\);\\n/im', '', $original);
         if ($original != $modified) {
             $this->logSection('yaml', 'Removing setting of YAML 1.1 spec');
             $this->getFilesystem()->touch($file);
             file_put_contents($file, $modified);
         }
     }
 }
 public function getPanelContent()
 {
     $content = array();
     if (sfConfig::get('sf_logging_enabled')) {
         $context = sfContext::getInstance();
         $content['request'] = sfDebug::requestAsArray($context->getRequest());
         $content['response'] = sfDebug::responseAsArray($context->getResponse());
         $content['user'] = sfDebug::userAsArray($context->getUser());
         $content['settings'] = sfDebug::settingsAsArray();
         $content['globals'] = sfDebug::globalsAsArray();
         $content['php'] = sfDebug::phpInfoAsArray();
         $content['symfony'] = sfDebug::symfonyInfoAsArray();
     } else {
         $content['Logging disabled'] = array();
     }
     return $content;
 }
 public function getPanelContent()
 {
     $config = array('debug' => sfConfig::get('sf_debug') ? 'on' : 'off', 'xdebug' => extension_loaded('xdebug') ? 'on' : 'off', 'logging' => sfConfig::get('sf_logging_enabled') ? 'on' : 'off', 'cache' => sfConfig::get('sf_cache') ? 'on' : 'off', 'compression' => sfConfig::get('sf_compressed') ? 'on' : 'off', 'tokenizer' => function_exists('token_get_all') ? 'on' : 'off', 'eaccelerator' => extension_loaded('eaccelerator') && ini_get('eaccelerator.enable') ? 'on' : 'off', 'apc' => extension_loaded('apc') && ini_get('apc.enabled') ? 'on' : 'off', 'xcache' => extension_loaded('xcache') && ini_get('xcache.cacher') ? 'on' : 'off');
     $html = '<ul id="sfWebDebugConfigSummary">';
     foreach ($config as $key => $value) {
         $html .= '<li class="is' . $value . ($key == 'xcache' ? ' last' : '') . '">' . $key . '</li>';
     }
     $html .= '</ul>';
     $context = sfContext::getInstance();
     $html .= $this->formatArrayAsHtml('request', sfDebug::requestAsArray($context->getRequest()));
     $html .= $this->formatArrayAsHtml('response', sfDebug::responseAsArray($context->getResponse()));
     $html .= $this->formatArrayAsHtml('user', sfDebug::userAsArray($context->getUser()));
     $html .= $this->formatArrayAsHtml('settings', sfDebug::settingsAsArray());
     $html .= $this->formatArrayAsHtml('globals', sfDebug::globalsAsArray());
     $html .= $this->formatArrayAsHtml('php', sfDebug::phpInfoAsArray());
     $html .= $this->formatArrayAsHtml('symfony', sfDebug::symfonyInfoAsArray());
     return $html;
 }
  /**
   * Formats a file link.
   *
   * @param  string  $file A file path or class name
   * @param  integer $line
   * @param  string  $text Text to use for the link
   *
   * @return string
   */
  public function formatFileLink($file, $line = null, $text = null)
  {
    // this method is called a lot so we avoid calling class_exists()
    if ($file && !sfToolkit::isPathAbsolute($file))
    {
      if (null === $text)
      {
        $text = $file;
      }

      // translate class to file name
      $r = new ReflectionClass($file);
      $file = $r->getFileName();
    }

    $shortFile = sfDebug::shortenFilePath($file);

    if ($linkFormat = sfConfig::get('sf_file_link_format', ini_get('xdebug.file_link_format')))
    {
      // return a link
      return sprintf(
        '<a href="%s" class="sfWebDebugFileLink" title="%s">%s</a>',
        htmlspecialchars(strtr($linkFormat, array('%f' => $file, '%l' => $line)), ENT_QUOTES, sfConfig::get('sf_charset')),
        htmlspecialchars($shortFile, ENT_QUOTES, sfConfig::get('sf_charset')),
        null === $text ? $shortFile : $text);
    }
    else if (null === $text)
    {
      // return the shortened file path
      return $shortFile;
    }
    else
    {
      // return the provided text with the shortened file path as a tooltip
      return sprintf('<span title="%s">%s</span>', $shortFile, $text);
    }
  }
示例#8
0
 /**
  * Returns the current configuration as HTML.
  *
  * @return string The current configuration as HTML
  */
 protected function getCurrentConfigAsHtml()
 {
     $config = array('debug' => sfConfig::get('sf_debug') ? 'on' : 'off', 'xdebug' => extension_loaded('xdebug') ? 'on' : 'off', 'logging' => sfConfig::get('sf_logging_enabled') ? 'on' : 'off', 'cache' => sfConfig::get('sf_cache') ? 'on' : 'off', 'eaccelerator' => extension_loaded('eaccelerator') && ini_get('eaccelerator.enable') ? 'on' : 'off', 'apc' => extension_loaded('apc') && ini_get('apc.enabled') ? 'on' : 'off', 'xcache' => extension_loaded('xcache') && ini_get('xcache.cacher') ? 'on' : 'off', 'compression' => sfConfig::get('sf_compressed') ? 'on' : 'off', 'syck' => extension_loaded('syck') ? 'on' : 'off');
     $result = '<ul id="sfWebDebugConfigSummary">';
     foreach ($config as $key => $value) {
         $result .= '<li class="is' . $value . '' . ($key == 'syck' ? ' last' : '') . '">' . $key . '</li>';
     }
     $result .= '</ul>';
     $context = sfContext::getInstance();
     $result .= $this->formatArrayAsHtml('request', sfDebug::requestAsArray($context->getRequest()));
     $result .= $this->formatArrayAsHtml('response', sfDebug::responseAsArray($context->getResponse()));
     $result .= $this->formatArrayAsHtml('settings', sfDebug::settingsAsArray());
     $result .= $this->formatArrayAsHtml('globals', sfDebug::globalsAsArray());
     $result .= $this->formatArrayAsHtml('php', sfDebug::phpInfoAsArray());
     return $result;
 }
示例#9
0
 /**
  * Prints the stack trace for this exception.
  *
  * @param Exception An Exception implementation instance
  */
 public function printStackTrace($exception = null)
 {
     if (!$exception) {
         $exception = $this;
     }
     // don't print message if it is an sfStopException exception
     if (method_exists($exception, 'getName') && $exception->getName() == 'sfStopException') {
         if (!sfConfig::get('sf_test')) {
             exit(1);
         }
         return;
     }
     if (class_exists('sfMixer', false)) {
         foreach (sfMixer::getCallables('sfException:printStackTrace:printStackTrace') as $callable) {
             $ret = call_user_func($callable, $this, $exception);
             if ($ret) {
                 if (!sfConfig::get('sf_test')) {
                     exit(1);
                 }
                 return;
             }
         }
     }
     if (!sfConfig::get('sf_test')) {
         header('HTTP/1.0 500 Internal Server Error');
         // clean current output buffer
         while (@ob_end_clean()) {
         }
         ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : '');
     }
     // send an error 500 if not in debug mode
     if (!sfConfig::get('sf_debug')) {
         error_log($exception->getMessage());
         $file = sfConfig::get('sf_web_dir') . '/errors/error500.php';
         include is_readable($file) ? $file : sfConfig::get('sf_symfony_data_dir') . '/web/errors/error500.php';
         if (!sfConfig::get('sf_test')) {
             exit(1);
         }
         return;
     }
     $message = null !== $exception->getMessage() ? $exception->getMessage() : 'n/a';
     $name = get_class($exception);
     $format = 0 == strncasecmp(PHP_SAPI, 'cli', 3) ? 'plain' : 'html';
     $traces = $this->getTraces($exception, $format);
     // extract error reference from message
     $error_reference = '';
     if (preg_match('/\\[(err\\d+)\\]/', $message, $matches)) {
         $error_reference = $matches[1];
     }
     // dump main objects values
     $sf_settings = '';
     $settingsTable = $requestTable = $responseTable = $globalsTable = '';
     if (class_exists('sfContext', false) && sfContext::hasInstance()) {
         $context = sfContext::getInstance();
         $settingsTable = $this->formatArrayAsHtml(sfDebug::settingsAsArray());
         $requestTable = $this->formatArrayAsHtml(sfDebug::requestAsArray($context->getRequest()));
         $responseTable = $this->formatArrayAsHtml(sfDebug::responseAsArray($context->getResponse()));
         $globalsTable = $this->formatArrayAsHtml(sfDebug::globalsAsArray());
     }
     include sfConfig::get('sf_symfony_data_dir') . '/data/exception.' . ($format == 'html' ? 'php' : 'txt');
     // if test, do not exit
     if (!sfConfig::get('sf_test')) {
         exit(1);
     }
 }
示例#10
0
 /**
  * Gets the stack trace for this exception.
  */
 protected static function outputStackTrace(Exception $exception)
 {
     $format = 'html';
     $code = '500';
     $text = 'Internal Server Error';
     if (class_exists('sfContext', false) && sfContext::hasInstance() && is_object($request = sfContext::getInstance()->getRequest()) && is_object($response = sfContext::getInstance()->getResponse())) {
         $dispatcher = sfContext::getInstance()->getEventDispatcher();
         if (sfConfig::get('sf_logging_enabled')) {
             $dispatcher->notify(new sfEvent($exception, 'application.log', array($exception->getMessage(), 'priority' => sfLogger::ERR)));
         }
         $event = $dispatcher->notifyUntil(new sfEvent($exception, 'application.throw_exception'));
         if ($event->isProcessed()) {
             return;
         }
         if ($response->getStatusCode() < 300) {
             // status code has already been sent, but is included here for the purpose of testing
             $response->setStatusCode(500);
         }
         $response->setContentType('text/html');
         if (!sfConfig::get('sf_test')) {
             foreach ($response->getHttpHeaders() as $name => $value) {
                 header($name . ': ' . $value);
             }
         }
         $code = $response->getStatusCode();
         $text = $response->getStatusText();
         $format = $request->getRequestFormat();
         if (!$format) {
             $format = 'html';
         }
         if ($mimeType = $request->getMimeType($format)) {
             $response->setContentType($mimeType);
         }
     } else {
         // a backward compatible default
         if (!sfConfig::get('sf_test')) {
             header('Content-Type: text/html; charset=' . sfConfig::get('sf_charset', 'utf-8'));
         }
     }
     // send an error 500 if not in debug mode
     if (!sfConfig::get('sf_debug')) {
         if ($template = self::getTemplatePathForError($format, false)) {
             include $template;
             return;
         }
     }
     $message = is_null($exception->getMessage()) ? 'n/a' : $exception->getMessage();
     $name = get_class($exception);
     $traces = self::getTraces($exception, 'html' != $format || 0 == strncasecmp(PHP_SAPI, 'cli', 3) ? 'plain' : 'html');
     // dump main objects values
     $sf_settings = '';
     $settingsTable = $requestTable = $responseTable = $globalsTable = $userTable = '';
     if (class_exists('sfContext', false) && sfContext::hasInstance()) {
         $context = sfContext::getInstance();
         $settingsTable = self::formatArrayAsHtml(sfDebug::settingsAsArray());
         $requestTable = self::formatArrayAsHtml(sfDebug::requestAsArray($context->getRequest()));
         $responseTable = self::formatArrayAsHtml(sfDebug::responseAsArray($context->getResponse()));
         $userTable = self::formatArrayAsHtml(sfDebug::userAsArray($context->getUser()));
         $globalsTable = self::formatArrayAsHtml(sfDebug::globalsAsArray());
     }
     if ($response) {
         $response->sendHttpHeaders();
     }
     if ($template = self::getTemplatePathForError($format, true)) {
         include $template;
         return;
     }
 }
示例#11
0
 protected function sendConfig()
 {
     $context = sfContext::getInstance();
     $config = array('debug' => sfConfig::get('sf_debug') ? 'on' : 'off', 'xdebug' => extension_loaded('xdebug') ? 'on' : 'off', 'logging' => sfConfig::get('sf_logging_enabled') ? 'on' : 'off', 'cache' => sfConfig::get('sf_cache') ? 'on' : 'off', 'compression' => sfConfig::get('sf_compressed') ? 'on' : 'off', 'tokenizer' => function_exists('token_get_all') ? 'on' : 'off', 'eaccelerator' => extension_loaded('eaccelerator') && ini_get('eaccelerator.enable') ? 'on' : 'off', 'apc' => extension_loaded('apc') && ini_get('apc.enabled') ? 'on' : 'off', 'xcache' => extension_loaded('xcache') && ini_get('xcache.cacher') ? 'on' : 'off', 'request' => sfDebug::removeObjects(sfDebug::requestAsArray($context->getRequest())), 'response' => sfDebug::removeObjects(sfDebug::responseAsArray($context->getResponse())), 'user' => sfDebug::removeObjects(sfDebug::userAsArray($context->getUser())), 'settings' => sfDebug::removeObjects(sfDebug::settingsAsArray()), 'globals' => sfDebug::removeObjects(sfDebug::globalsAsArray()), 'php' => sfDebug::removeObjects(sfDebug::phpInfoAsArray()), 'symfony' => sfDebug::removeObjects(sfDebug::symfonyInfoAsArray()));
     $this->sfFire->dump('Config', $config);
 }
示例#12
0
<?php

/*
 * This file is part of the symfony package.
 * (c) 2004-2006 Fabien Potencier <*****@*****.**>
 * 
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
require_once dirname(__FILE__) . '/../../bootstrap/unit.php';
$t = new lime_test(1);
// ::removeObjects()
$t->diag('::removeObjects()');
$objectArray = array('foo', 42, new sfDebug(), array('bar', 23, new lime_test(null)));
$cleanedArray = array('foo', 42, 'sfDebug Object()', array('bar', 23, 'lime_test Object()'));
$t->is_deeply(sfDebug::removeObjects($objectArray), $cleanedArray, '::removeObjects() converts objects to String representations using the class name');
 public function getCurrentConfigAsArray()
 {
     $content = array();
     $context = sfContext::getInstance();
     $content['request'] = sfDebug::requestAsArray($context->getRequest());
     $content['response'] = sfDebug::responseAsArray($context->getResponse());
     //    $content['user']     = sfDebug::userAsArray($context->getUser()); //not available in symfony 1.0
     $content['settings'] = sfDebug::settingsAsArray();
     $content['globals'] = sfDebug::globalsAsArray();
     $content['php'] = sfDebug::phpInfoAsArray();
     //    $content['symfony']  = $this->myFormatArrayAsHtml(sfDebug::symfonyInfoAsArray()); not available in symfony 1.0
     return $content;
 }
示例#14
0
 /**
  * Gets the stack trace for this exception.
  */
 protected static function outputStackTrace($exception)
 {
     if (class_exists('sfContext', false) && sfContext::hasInstance()) {
         $dispatcher = sfContext::getInstance()->getEventDispatcher();
         if (sfConfig::get('sf_logging_enabled')) {
             $dispatcher->notify(new sfEvent($exception, 'application.log', array($exception->getMessage(), 'priority' => sfLogger::ERR)));
         }
         $event = $dispatcher->notifyUntil(new sfEvent($exception, 'application.throw_exception'));
         if ($event->isProcessed()) {
             return;
         }
     }
     // send an error 500 if not in debug mode
     if (!sfConfig::get('sf_debug')) {
         $files = array();
         // first check for app/project specific error page, can only do this if we have a context
         if (sfConfig::get('sf_app_config_dir')) {
             $files[] = sfConfig::get('sf_app_config_dir') . '/error_500.php';
         }
         $files[] = sfConfig::get('sf_config_dir') . '/error_500.php';
         $files[] = sfConfig::get('sf_web_dir') . '/errors/error500.php';
         $files[] = dirname(__FILE__) . '/data/error500.php';
         foreach ($files as $file) {
             if (is_readable($file)) {
                 include $file;
                 return;
             }
         }
     }
     $message = null !== $exception->getMessage() ? $exception->getMessage() : 'n/a';
     $name = get_class($exception);
     $format = 0 == strncasecmp(PHP_SAPI, 'cli', 3) ? 'plain' : 'html';
     $traces = self::getTraces($exception, $format);
     // dump main objects values
     $sf_settings = '';
     $settingsTable = $requestTable = $responseTable = $globalsTable = $userTable = '';
     if (class_exists('sfContext', false) && sfContext::hasInstance()) {
         $context = sfContext::getInstance();
         $settingsTable = self::formatArrayAsHtml(sfDebug::settingsAsArray());
         $requestTable = self::formatArrayAsHtml(sfDebug::requestAsArray($context->getRequest()));
         $responseTable = self::formatArrayAsHtml(sfDebug::responseAsArray($context->getResponse()));
         $userTable = self::formatArrayAsHtml(sfDebug::userAsArray($context->getUser()));
         $globalsTable = self::formatArrayAsHtml(sfDebug::globalsAsArray());
     }
     include dirname(__FILE__) . '/data/exception.' . ($format == 'html' ? 'php' : 'txt');
 }
 /**
  * Shortens an action's template path.
  * 
  * @param  string $path
  * 
  * @return string
  */
 protected function shortenTemplatePath($path)
 {
     $path = realpath($path);
     // application module
     $sep = preg_quote(DIRECTORY_SEPARATOR);
     if (preg_match('#modules' . $sep . '(\\w+)' . $sep . 'templates' . $sep . '(.*)$#', $path, $match)) {
         return $match[1] . '&nbsp;&hellip;&nbsp;' . $match[2];
     }
     return str_replace('SF_ROOT_DIR' . DIRECTORY_SEPARATOR, '', sfDebug::shortenFilePath($path));
 }
 /**
  * Returns an array of exception traces.
  *
  * @param Exception $exception  An Exception implementation instance
  * @param string    $format     The trace format (txt or html)
  *
  * @return array An array of traces
  */
 protected static function getTraces($exception, $format = 'txt')
 {
     $traceData = $exception->getTrace();
     array_unshift($traceData, array('function' => '', 'file' => $exception->getFile() != null ? $exception->getFile() : null, 'line' => $exception->getLine() != null ? $exception->getLine() : null, 'args' => array()));
     $traces = array();
     if ($format == 'html') {
         $lineFormat = 'at <strong>%s%s%s</strong>(%s)<br />in <em>%s</em> line %s <a href="#" onclick="toggle(\'%s\'); return false;">...</a><br /><ul class="code" id="%s" style="display: %s">%s</ul>';
     } else {
         $lineFormat = 'at %s%s%s(%s) in %s line %s';
     }
     for ($i = 0, $count = count($traceData); $i < $count; $i++) {
         $line = isset($traceData[$i]['line']) ? $traceData[$i]['line'] : null;
         $file = isset($traceData[$i]['file']) ? $traceData[$i]['file'] : null;
         $args = isset($traceData[$i]['args']) ? $traceData[$i]['args'] : array();
         $traces[] = sprintf($lineFormat, isset($traceData[$i]['class']) ? $traceData[$i]['class'] : '', isset($traceData[$i]['type']) ? $traceData[$i]['type'] : '', $traceData[$i]['function'], self::formatArgs($args, false, $format), self::formatFile($file, $line, $format, null === $file ? 'n/a' : sfDebug::shortenFilePath($file)), null === $line ? 'n/a' : $line, 'trace_' . $i, 'trace_' . $i, $i == 0 ? 'block' : 'none', self::fileExcerpt($file, $line));
     }
     return $traces;
 }
 public function getCurrentConfigAsArray()
 {
     $content = array();
     $context = sfContext::getInstance();
     $content['request'] = sfDebug::requestAsArray($context->getRequest());
     $content['response'] = sfDebug::responseAsArray($context->getResponse());
     $content['user'] = sfDebug::userAsArray($context->getUser());
     $content['settings'] = sfDebug::settingsAsArray();
     $content['globals'] = sfDebug::globalsAsArray();
     $content['php'] = sfDebug::phpInfoAsArray();
     $content['symfony'] = sfDebug::symfonyInfoAsArray();
     return $content;
 }