Hello,
Blesta has its own mechanism for displaying errors. It is part of minPHP framework and the relevant files are /lib/stdlib.php and /lib/unknown_exception.php. However, there are PHP libraries that can help you further to ease development in PHP. I like https://packagist.org/packages/tracy/tracy (see an example here: http://examples.nette.org/ndebug/nette-exception.html)
Advantages
Tracy has a production mode (useful for production version of Blesta when you want to log exceptions and other errors to files) and a develoment mode (useful for plugin developers, maybe even Blesta developers). Development mode allows you to see stack trace, parameters and much more (see http://examples.nette.org/ndebug/nette-exception.html)
You can catch all unhandled exceptions. You can event catch NOTICE errors (I believe that everybody should do that.)
If an error occurs you have a log file to examine.
How to make it work in Blesta
1) Composer settings (composer.json)
{
"config": {
"vendor-dir": "vendors"
},
"require": {
"tracy/tracy": "dev-master"
}
}
2) Create folder /log (in Blesta folder)
3) Update /index.php
<?php
/* SVN FILE: $Id: index.php 52 2010-10-01 20:50:08Z cody $ */
/**
* This file transfers control over to the dispatcher which will invoke the
* appropriate controller. We also handle any exceptions that were not handled
* elsewhere in the application, so we can end gracefully.
*
* @package minPHP
* @version $Revision: 52 $
* @modifiedby $LastChangedBy: cody $
* @lastmodified $Date: 2010-10-01 13:50:08 -0700 (Fri, 01 Oct 2010) $
*/
$start = microtime(true);
include __DIR__ . '/vendors/autoload.php';
include __DIR__ . '/vendors/Logger/Logger.php'; // my logging class containing \BlestaLogger (it has nothing to do with Tracy)
\BlestaLogger::create();
\BlestaLogger::addDebug("==== REQUEST START ====");
//try {
include(dirname(__FILE__) . "/lib/init.php");
// Start Tracy
// Note: Error handlers are registered in lib/init.php. Tracy does the same therefore
// Tracy needs to be initalized after init.php to overwrite previous behaviour)
$serverName = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : "";
$productionMode = php_sapi_name() === 'cli' || stripos($serverName, '.local') === false;
$logDir = __DIR__ . '/log';
\Tracy\Debugger::$strictMode = true;
\Tracy\Debugger::$scream = true;
\Tracy\Debugger::$onFatalError = "\UnknownException::setFatalErrorHandler";
\Tracy\Debugger::enable($productionMode, $logDir);
// Dispatch the Web request
if (!empty($_SERVER['REQUEST_URI']))
Dispatcher::dispatch($_SERVER['REQUEST_URI']);
// Dispatch the CLI request
else
Dispatcher::dispatchCli($argv);
//}
/*catch (Exception $e) {
try {
// Attempt to raise any error, gracefully
Dispatcher::raiseError($e);
}
catch (Exception $e) {
if (Configure::get("System.debug"))
echo $e->getMessage() . " on line <strong>" . $e->getLine() .
"</strong> in <strong>" . $e->getFile() . "</strong>\n" .
"<br />Printing Stack Trace:<br />" . nl2br($e->getTraceAsString());
else
echo $e->getMessage();
}
}*/
\BlestaLogger::addDebug("==== REQUEST END ====");
$end = microtime(true);
// Display rendering time if benchmarking is enabled
if (Configure::get("System.benchmark"))
echo "execution time: " . ($end-$start) . " seconds";
?>
Feature request
If you like Tracy (please note that I'm not affiliated with the library in any way) maybe you can integrate it into Blesta.
Have a nice day!