1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace PhpBoot\ORM; |
4
|
|
|
|
5
|
|
|
use DI\Container; |
6
|
|
|
use DI\FactoryInterface; |
7
|
|
|
use Doctrine\Common\Cache\Cache; |
8
|
|
|
use PhpBoot\DI\DIContainerBuilder; |
9
|
|
|
use PhpBoot\Entity\Annotations\ClassAnnotationHandler; |
10
|
|
|
use PhpBoot\Entity\Annotations\PropertyAnnotationHandler; |
11
|
|
|
use PhpBoot\Entity\Annotations\VarAnnotationHandler; |
12
|
|
|
use PhpBoot\Entity\EntityContainerBuilder; |
13
|
|
|
use PhpBoot\ORM\Annotations\PKAnnotationHandler; |
14
|
|
|
use PhpBoot\ORM\Annotations\TableAnnotationHandler; |
15
|
|
|
use DI\InvokerInterface as DIInvokerInterface; |
16
|
|
|
|
17
|
|
|
class ModelContainerBuilder extends EntityContainerBuilder |
18
|
|
|
{ |
19
|
|
|
static $DEFAULT_ANNOTATIONS=[ |
20
|
|
|
[ClassAnnotationHandler::class, 'class'], |
21
|
|
|
[PKAnnotationHandler::class, "class.children[?name=='pk']"], |
22
|
|
|
[TableAnnotationHandler::class, "class.children[?name=='table']"], |
23
|
|
|
[PropertyAnnotationHandler::class, 'properties'], |
24
|
|
|
[VarAnnotationHandler::class, "properties.*.children[?name=='var'][]"], |
25
|
|
|
//[ValidateAnnotationHandler::class, "properties.*.children[?name=='".Names::VALIDATE."'][]"], |
26
|
|
|
]; |
27
|
|
|
|
28
|
11 |
|
public function __construct(FactoryInterface $factory, |
29
|
|
|
DIInvokerInterface $diInvoker, |
30
|
|
|
Cache $cache) |
31
|
|
|
{ |
32
|
11 |
|
$this->container = DIContainerBuilder::buildDevContainer(); |
|
|
|
|
33
|
11 |
|
parent::__construct($factory, $diInvoker, $cache, self::$DEFAULT_ANNOTATIONS); |
34
|
11 |
|
} |
35
|
|
|
/** |
36
|
|
|
* load from class with local cache |
37
|
|
|
* @param string $className |
38
|
|
|
* @return ModelContainer |
39
|
|
|
*/ |
40
|
11 |
|
public function build($className) |
41
|
|
|
{ |
42
|
11 |
|
return parent::build($className); |
43
|
|
|
} |
44
|
|
|
|
45
|
|
|
/** |
46
|
|
|
* @param $className |
47
|
|
|
* @return ModelContainer |
48
|
|
|
*/ |
49
|
2 |
|
public function buildWithoutCache($className) |
50
|
|
|
{ |
51
|
2 |
|
return parent::buildWithoutCache($className); |
52
|
|
|
} |
53
|
|
|
/** |
54
|
|
|
* @param string $className |
55
|
|
|
* @return ModelContainer |
56
|
|
|
*/ |
57
|
2 |
|
protected function createContainer($className) |
58
|
|
|
{ |
59
|
2 |
|
return $this->factory->make(ModelContainer::class, ['className'=>$className]); |
60
|
|
|
} |
61
|
|
|
} |
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: