c-v-c-v
c-v-c-v
> GenerateModelIDEVisitor 没看懂这个问题出在哪里 某些visitor中使用了ReflectionClass把这个模型类加载到内存中去了,后面又有visitor(ModelRewriteGetterSetterVisitor等等)修改了语法树,如果有--with-ide,那么最后会执行GenerateModelIDEVisitor,里面使用的最新代码的语法树,并且使用了$reflection->getMethod来获取方法,新增的方法(例如ModelRewriteGetterSetterVisitor)会抛出方法不存在的异常,只有再一次执行命令 GenerateModelIDEVisitor 才会正常执行。 错误重现:添加 ModelRewriteGetterSetterVisitor,然后执行下面命令生成model, php bin/hyperf.php gen:model user --with-ide,其中user表包括address字段,所以生成了getAddress。 ·Method App\Model\User::getAddress() does not exist [ERROR] ReflectionException: Method App\Model\User::getAddress() does not exist in /project/hyperf/src/database/src/Commands/Ast/GenerateModelIDEVisitor.php:163·
使用的 ModelRewriteGetterSetterVisitor 的目的,实体所有的属性由Getter和Setter来控制,方便管理(可以通过IDE查看哪些地方使用),如果直接使用getAttribute、类属性或数组等不方便查找,后面如果要加额外的操作也方便。参考doctrine或java中的hibernate等等