@@ -30,24 +30,45 @@ public function __construct(Reader $reader)
30
30
*/
31
31
public function renderModel (string $ path )
32
32
{
33
- $ modelClassArr = explode ("\\" , $ path );
34
- $ modelActionName = $ modelClassArr [count ($ modelClassArr ) - 1 ];
35
- $ modelClassName = $ modelClassArr [count ($ modelClassArr ) - 2 ];
36
- unset($ modelClassArr [count ($ modelClassArr ) - 1 ]);
37
- $ modelClassPath = implode ("\\" , $ modelClassArr );
38
- $ classReflect = new \ReflectionClass ($ modelClassPath );
39
- $ modelActionName = trim ($ modelActionName );
40
- $ methodAction = $ classReflect ->getMethod ($ modelActionName );
41
- // 获取所有模型属性
42
- $ propertys = $ classReflect ->getDefaultProperties ();
43
33
44
- // 获取表字段
45
- $ model = $ this ->getModel ($ methodAction , $ modelClassName );
34
+ if (strpos ($ path , '@ ' ) !== false ){
35
+ $ pathArr = explode ("@ " , $ path );
36
+ $ modelClassPath = $ pathArr [0 ];
37
+ $ methodName = $ pathArr [1 ];
38
+ $ model = $ this ->getModelClass ($ modelClassPath );
39
+ return $ this ->parseModelTable ($ model ,$ modelClassPath ,$ methodName );
40
+ }else if (class_exists ($ path )) {
41
+ $ model = $ this ->getModelClass ($ path );
42
+ return $ this ->parseModelTable ($ model ,$ path ,"" );
43
+ } else {
44
+ $ modelClassArr = explode ("\\" , $ path );
45
+ $ methodName = $ modelClassArr [count ($ modelClassArr ) - 1 ];
46
+ unset($ modelClassArr [count ($ modelClassArr ) - 1 ]);
47
+ $ modelClassPath = implode ("\\" , $ modelClassArr );
48
+ if (class_exists ($ modelClassPath )){
49
+ $ model = $ this ->getModelClass ($ modelClassPath );
50
+ return $ this ->parseModelTable ($ model ,$ modelClassPath ,$ methodName );
51
+ }else {
52
+ throw new ErrorException ("ref file not exists " , 412 , [
53
+ 'filepath ' => $ path
54
+ ]);
55
+ }
56
+ }
57
+ }
58
+
59
+ protected function parseModelTable ($ model ,$ path ,$ methodName ="" ){
46
60
if (!is_callable (array ($ model , 'getTable ' ))) {
47
61
return false ;
48
62
}
49
- $ table = $ this ->getTableDocument ($ model , $ propertys );
63
+ $ classReflect = new \ReflectionClass ($ path );
64
+ // 获取所有模型属性
65
+ $ propertys = $ classReflect ->getDefaultProperties ();
50
66
67
+ $ table = $ this ->getTableDocument ($ model , $ propertys );
68
+ if (empty ($ methodName )){
69
+ return $ table ;
70
+ }
71
+ $ methodAction = $ classReflect ->getMethod ($ methodName );
51
72
// 模型注释-field
52
73
if ($ fieldAnnotations = $ this ->reader ->getMethodAnnotation ($ methodAction , Field::class)) {
53
74
$ table = (new Utils ())->filterParamsField ($ table , $ fieldAnnotations ->value , 'field ' );
@@ -132,43 +153,19 @@ protected function handleParamValue($values): array
132
153
/**
133
154
* 获取模型实例
134
155
* @param $method
135
- * @param $modelClassName
136
156
* @return mixed|null
137
157
*/
138
- public function getModel ( $ method , $ modelClassName )
158
+ public function getModelClass ( $ namespaceName )
139
159
{
140
- if (!empty ($ method ->class )) {
141
- $ relationModelClass = $ this ->getIncludeClassName ($ method ->class , $ modelClassName );
142
- if ($ relationModelClass ) {
143
- $ modelInstance = new $ relationModelClass ();
144
- return $ modelInstance ;
145
- } else {
146
- return null ;
147
- }
160
+ if (!empty ($ namespaceName ) && class_exists ($ namespaceName )) {
161
+ $ modelInstance = new $ namespaceName ();
162
+ return $ modelInstance ;
148
163
} else {
149
164
return null ;
150
165
}
151
166
}
152
167
153
168
154
- /**
155
- * 获取模型类
156
- * @param $mainClass
157
- * @param $class
158
- * @return string
159
- * @throws \ReflectionException
160
- */
161
- protected function getIncludeClassName ($ mainClass , $ class )
162
- {
163
- $ classReflect = new \ReflectionClass ($ mainClass );
164
- $ possibleClass = $ classReflect ->getNamespaceName () . "\\" . $ class ;
165
- if (class_exists ($ possibleClass )) {
166
- return $ possibleClass ;
167
- } else {
168
- return "" ;
169
- }
170
- }
171
-
172
169
/**
173
170
* 获取模型注解数据
174
171
* @param $model
0 commit comments