1
+ <?php
2
+
3
+
4
+ namespace Ubiquity \scaffolding \creators ;
5
+
6
+
7
+ use Ubiquity \utils \base \UFileSystem ;
8
+ use Ubiquity \utils \base \UString ;
9
+
10
+ class ClassCreator {
11
+ private string $ template ;
12
+ private string $ classname ;
13
+ private string $ namespace ;
14
+ private string $ uses ;
15
+ private string $ extendsOrImplements ;
16
+ private string $ classContent ;
17
+
18
+ private function getTemplateDir () {
19
+ return \dirname (__DIR__ ) . "/scaffolding/templates/ " ;
20
+ }
21
+
22
+ public function __construct ($ classname ,$ uses ,$ namespace ,$ extendsOrImplements ='' ,$ classContent ='' ){
23
+ $ this ->classname =$ classname ;
24
+ $ this ->uses =$ uses ;
25
+ $ this ->namespace =$ namespace ;
26
+ $ this ->extendsOrImplements =$ extendsOrImplements ;
27
+ $ this ->classContent =$ classContent ;
28
+ $ this ->template ='class.tpl ' ;
29
+ }
30
+
31
+ public function generate ():bool {
32
+ $ namespaceVar = '' ;
33
+ if (UString::isNotNull ($ this ->namespace )) {
34
+ $ namespaceVar = "namespace {$ this ->namespace }; " ;
35
+ }
36
+ $ variables = [
37
+ '%classname% ' => $ this ->classname ,
38
+ '%namespace% ' => $ namespaceVar ,
39
+ '%uses% ' => $ this ->uses ,
40
+ '%extendsOrImplements% ' => $ this ->extendsOrImplements ,
41
+ '%classContent% ' => $ this ->classContent
42
+ ];
43
+ $ templateDir = $ this ->getTemplateDir ();
44
+ $ directory = UFileSystem::getDirFromNamespace ($ this ->namespace );
45
+ UFileSystem::safeMkdir ($ directory );
46
+ $ filename = UFileSystem::cleanFilePathname ($ directory . \DS . $ this ->classname . '.php ' );
47
+ if (! file_exists ($ filename )) {
48
+ UFileSystem::openReplaceWriteFromTemplateFile ($ templateDir . $ this ->template , $ filename , $ variables );
49
+ return true ;
50
+ }
51
+ return false ;
52
+ }
53
+
54
+ /**
55
+ * @return string
56
+ */
57
+ public function getTemplate (): string {
58
+ return $ this ->template ;
59
+ }
60
+
61
+ /**
62
+ * @param string $template
63
+ */
64
+ public function setTemplate (string $ template ): void {
65
+ $ this ->template = $ template ;
66
+ }
67
+ }
0 commit comments