Skip to content

Commit 0919d4e

Browse files
committed
ref引入mock无需指定到方法,并支持使用@指定模型方法
1 parent 39e90cb commit 0919d4e

File tree

1 file changed

+38
-41
lines changed

1 file changed

+38
-41
lines changed

src/parseApi/ParseModel.php

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,45 @@ public function __construct(Reader $reader)
3030
*/
3131
public function renderModel(string $path)
3232
{
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();
4333

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=""){
4660
if (!is_callable(array($model, 'getTable'))) {
4761
return false;
4862
}
49-
$table = $this->getTableDocument($model, $propertys);
63+
$classReflect = new \ReflectionClass($path);
64+
// 获取所有模型属性
65+
$propertys = $classReflect->getDefaultProperties();
5066

67+
$table = $this->getTableDocument($model, $propertys);
68+
if (empty($methodName)){
69+
return $table;
70+
}
71+
$methodAction = $classReflect->getMethod($methodName);
5172
// 模型注释-field
5273
if ($fieldAnnotations = $this->reader->getMethodAnnotation($methodAction, Field::class)) {
5374
$table = (new Utils())->filterParamsField($table, $fieldAnnotations->value, 'field');
@@ -132,43 +153,19 @@ protected function handleParamValue($values): array
132153
/**
133154
* 获取模型实例
134155
* @param $method
135-
* @param $modelClassName
136156
* @return mixed|null
137157
*/
138-
public function getModel($method, $modelClassName)
158+
public function getModelClass($namespaceName)
139159
{
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;
148163
} else {
149164
return null;
150165
}
151166
}
152167

153168

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-
172169
/**
173170
* 获取模型注解数据
174171
* @param $model

0 commit comments

Comments
 (0)