Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php namespace Clockwork\DataSource;use Clockwork\DataSource\DataSource;use Clockwork\Helpers\Serializer;use Clockwork\Request\Request;use Clockwork\Request\Timeline\Timeline;use Illuminate\Contracts\Events\Dispatcher;// Data source for Laravel views component, provides rendered viewsclass LaravelViewsDataSource extends DataSource{// Event dispatcherprotected $dispatcher;// Timeline data structure for collected viewsprotected $views;// Whether we should collect view dataprotected $collectData = false;// Create a new data source instance, takes an event dispatcher as argumentpublic function __construct(Dispatcher $dispatcher, $collectData = false){$this->dispatcher = $dispatcher;$this->collectData = $collectData;$this->views = new Timeline;}// Adds rendered views to the requestpublic function resolve(Request $request){$request->viewsData = array_merge($request->viewsData, $this->views->finalize());return $request;}// Reset the data source to an empty state, clearing any collected datapublic function reset(){$this->views = new Timeline;}// Listen to the views eventspublic function listenToEvents(){$this->dispatcher->listen('composing:*', function ($view, $data = null) {if (is_string($view) && is_array($data)) { // Laravel 5.4 wildcard event$view = $data[0];}$data = array_filter($this->collectData ? $view->getData() : [],function ($v, $k) { return strpos($k, '__') !== 0; },\ARRAY_FILTER_USE_BOTH);$this->views->event('Rendering a view', ['name' => 'view ' . $view->getName(),'start' => $time = microtime(true),'end' => $time,'data' => ['name' => $view->getName(),'data' => (new Serializer)->normalize($data)]]);});}}