1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <?php namespace Laravel\Profiling;
- use Laravel\View;
- use Laravel\File;
- use Laravel\Event;
- use Laravel\Config;
- use Laravel\Request;
- class Profiler {
- /**
- * An array of the recorded Profiler data.
- *
- * @var array
- */
- protected static $data = array('queries' => array(), 'logs' => array());
- /**
- * Get the rendered contents of the Profiler.
- *
- * @param Response $response
- * @return string
- */
- public static function render($response)
- {
- // We only want to send the profiler toolbar if the request is not an AJAX
- // request, as sending it on AJAX requests could mess up JSON driven API
- // type applications, so we will not send anything in those scenarios.
- if ( ! Request::ajax())
- {
- return render('path: '.__DIR__.'/template'.BLADE_EXT, static::$data);
- }
- }
- /**
- * Add a log entry to the log entries array.
- *
- * @return void
- */
- public static function log($type, $message)
- {
- static::$data['logs'][] = array($type, $message);
- }
- /**
- * Add a performed SQL query to the Profiler.
- *
- * @param string $sql
- * @param array $bindings
- * @param float $time
- * @return void
- */
- public static function query($sql, $bindings, $time)
- {
- foreach ($bindings as $binding)
- {
- $sql = preg_replace('/\?/', $binding, $sql, 1);
- }
- static::$data['queries'][] = array($sql, $time);
- }
- /**
- * Attach the Profiler's event listeners.
- *
- * @return void
- */
- public static function attach()
- {
- // First we'll attach to the query and log events. These allow us to catch
- // all of the SQL queries and log messages that come through Laravel,
- // and we will pass them onto the Profiler for simple storage.
- Event::listen('laravel.log', function($type, $message)
- {
- Profiler::log($type, $message);
- });
- Event::listen('laravel.query', function($sql, $bindings, $time)
- {
- Profiler::query($sql, $bindings, $time);
- });
- // We'll attach the profiler to the "done" event so that we can easily
- // attach the profiler output to the end of the output sent to the
- // browser. This will display the profiler's nice toolbar.
- Event::listen('laravel.done', function($response)
- {
- echo Profiler::render($response);
- });
- }
- }
|