diff --git a/Annotation/Annotation.php b/Annotation/Annotation.php index d0ae8ffd..eac65313 100644 --- a/Annotation/Annotation.php +++ b/Annotation/Annotation.php @@ -168,24 +168,39 @@ class Annotation extends Component $annotation = $annotation->execute([$object, $value->getName()]); $this->_prepertyes[get_class($object)][$value->getName()] = $annotation; - if (str_contains(env('workerId'), 'Task')) { - var_dump(get_class($object) . '::' . $value->getName()); - } - if ($value->isPublic()) { - $object->{$value->getName()} = $annotation; - } else { - $name = 'set' . ucfirst($value->getName()); - if (!method_exists($object, $name)) { - throw new NotFindPropertyException('set property need method ' . $name); - } - $object->$name($annotation); + continue; + } + if (!method_exists($object, ($name = 'set' . ucfirst($value->getName())))) { + throw new NotFindPropertyException('set property need method ' . $name); } } } } + /** + * @param $class + * @param string $property + * @return mixed|null + */ + public function getPropertyAnnotation($class, $property = ''): ?array + { + if (is_object($class)) { + $class = get_class($class); + } + if (!isset($this->_prepertyes[$class])) { + return null; + } + + if (!empty($property)) { + return $this->_prepertyes[$class][$property] ?? null; + } + + return $this->_prepertyes[$class]; + } + + /** * @param string $class * @return ReflectionClass|null diff --git a/Database/Base/BaseActiveRecord.php b/Database/Base/BaseActiveRecord.php index d7a0a3e9..15607f99 100644 --- a/Database/Base/BaseActiveRecord.php +++ b/Database/Base/BaseActiveRecord.php @@ -108,7 +108,23 @@ abstract class BaseActiveRecord extends Component implements IOrm, ArrayAccess } else { $this->_relation = Context::getContext(Relation::class); } - $this->_annotations = annotation()->getMethods(get_called_class()); + $this->createAnnotation(); + } + + + /** + * @throws ComponentException + */ + private function createAnnotation() + { + $annotation = Snowflake::app()->getAttributes(); + + $this->_annotations = $annotation->getMethods(get_called_class()); + + $lists = $annotation->getPropertyAnnotation(get_called_class()); + foreach ($lists as $name => $list) { + $this->{$name} = $list; + } }