Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
199 lars 1
<?php namespace Clockwork\DataSource;
2
 
3
use Clockwork\DataSource\DataSource;
4
use Clockwork\Helpers\Serializer;
5
use Clockwork\Request\Request;
6
use Clockwork\Request\Timeline\Timeline;
7
 
8
use Illuminate\Contracts\Events\Dispatcher;
9
 
10
// Data source for Laravel views component, provides rendered views
11
class LaravelViewsDataSource extends DataSource
12
{
13
	// Event dispatcher
14
	protected $dispatcher;
15
 
16
	// Timeline data structure for collected views
17
	protected $views;
18
 
19
	// Whether we should collect view data
20
	protected $collectData = false;
21
 
22
	// Create a new data source instance, takes an event dispatcher as argument
23
	public function __construct(Dispatcher $dispatcher, $collectData = false)
24
	{
25
		$this->dispatcher = $dispatcher;
26
 
27
		$this->collectData = $collectData;
28
 
29
		$this->views = new Timeline;
30
	}
31
 
32
	// Adds rendered views to the request
33
	public function resolve(Request $request)
34
	{
35
		$request->viewsData = array_merge($request->viewsData, $this->views->finalize());
36
 
37
		return $request;
38
	}
39
 
40
	// Reset the data source to an empty state, clearing any collected data
41
	public function reset()
42
	{
43
		$this->views = new Timeline;
44
	}
45
 
46
	// Listen to the views events
47
	public function listenToEvents()
48
	{
49
		$this->dispatcher->listen('composing:*', function ($view, $data = null) {
50
			if (is_string($view) && is_array($data)) { // Laravel 5.4 wildcard event
51
				$view = $data[0];
52
			}
53
 
54
			$data = array_filter(
55
				$this->collectData ? $view->getData() : [],
56
				function ($v, $k) { return strpos($k, '__') !== 0; },
57
				\ARRAY_FILTER_USE_BOTH
58
			);
59
 
60
			$this->views->event('Rendering a view', [
61
				'name'  => 'view ' . $view->getName(),
62
				'start' => $time = microtime(true),
63
				'end'   => $time,
64
				'data'  => [
65
					'name' => $view->getName(),
66
					'data' => (new Serializer)->normalize($data)
67
				]
68
			]);
69
		});
70
	}
71
}