1 | <?php |
||
4 | class ModelClosure |
||
5 | { |
||
6 | /** @var \Closure */ |
||
7 | protected $fillFn; |
||
8 | /** @var \Closure */ |
||
9 | protected $dataFn; |
||
10 | |||
11 | /** |
||
12 | * @return \Closure |
||
13 | */ |
||
14 | 4 | public function getToDataFn() |
|
22 | |||
23 | /** |
||
24 | * @return \Closure |
||
25 | */ |
||
26 | 3 | public function getFillFn() |
|
34 | |||
35 | /** |
||
36 | * @return \Closure |
||
37 | */ |
||
38 | 4 | protected function createDataFn() { |
|
39 | return function (array $mapping, TypeConverter $typeConverter) { |
||
40 | 2 | $props = []; |
|
41 | |||
42 | 2 | foreach ($mapping as $name => $prop) { |
|
43 | 2 | $getter = array_key_exists('get', $prop) ? $prop['get'] : null; |
|
44 | 2 | $propVal = array_key_exists('prop', $prop) ? $prop['prop'] : null; |
|
45 | |||
46 | 2 | if ($getter) { |
|
47 | 2 | $method = is_array($getter) ? $getter[0] : $getter; |
|
48 | 2 | $args = is_array($getter) ? $getter[1] : []; |
|
49 | 2 | $val = call_user_func_array([$this, $method], $args); |
|
50 | 2 | } elseif ($propVal) { |
|
51 | 2 | $val = $this->{$propVal}; |
|
52 | 2 | } else { |
|
53 | throw new \InvalidArgumentException('Bad mapping config'); |
||
54 | } |
||
55 | |||
56 | 2 | if ($val !== null) { |
|
57 | 2 | $props[$name] = $typeConverter->toStorage($val, $prop); |
|
58 | 2 | } |
|
59 | 2 | } |
|
60 | |||
61 | 1 | return $props; |
|
62 | 4 | }; |
|
63 | } |
||
64 | |||
65 | /** |
||
66 | * @return \Closure |
||
67 | */ |
||
68 | protected function createFillFn() |
||
89 | } |