识别哪些类具有注释并获取也具有注释的属性的值

我最初的想法是创建一个格式生成器。比如写下一些文本,然后写下一些用大括号括起来的变量,然后写下那些具有实际值的变量,我想让我的系统知道哪些类可以用于格式化以及系统可以使用它的哪些属性。

让我们假设,在此图像中,始终检索 id 为 1 的对象,并且 id 始终存在(忘记绘制它)

https://img3.sycdn.imooc.com/64cf40700001e4c104970544.jpg

我想要做的是让一个或多个带有注释的类,然后识别哪些类具有该注释,并让我知道它们是哪些类。在上面的示例中,那些可用的类应该在下拉列表中


/*

 * @Format

*/

public class Pizza {

    public $hasCheese;

    /*

     * @FormatField("pizzaPrice")

    */

    public $price;

假设我有一堆类,并且唯一一个有我的注释Format,并且它的一些属性有注释,FormatField那么我希望有一种方法让我知道类似的内容"It looks like the class Pizza can be used in a Format",然后哪些属性可用于格式化,哪些属性然后,以FormatField某种方式通过别名检索该属性的值pizzaPrice


我写了这种伪代码,希望能更好地说明我想学的东西


var availableClasses = getClassesThatHaveFormatAnnotation();

foreach (availableClasses as availableClass) {

    var properties = availableClass.findFormatFields()

    print("Looks like the " + availableClass->name + " class has the Format annotation")

    foreach (properties as property) {

        print("Field available: " + property.name)

        print("Value: " + property.value)

    }

}

var pizza = findPizzaById(1);

有了这个披萨,我希望能够通过其别名仅访问上面有 @FormatField 的属性,例如 {{pizzaPrice}} 但 {{hasCheese}} 不应该工作,因为它没有 @FormatField 注释;


qq_花开花谢_0
浏览 79回答 1
1回答

森林海

以下是查找实体及其带注释的属性的代码示例。您可以将结果放在某处。但是,如果不替换带注释的实体,您将可以使用所有属性,因此也许您需要创建一个侦听器,它将侦听 symfony 内核事件并修改您的响应数据。    $annotationReader = new \Doctrine\Common\Annotations\AnnotationReader();    $entities = [];    foreach ($entities as $entity) {        $reflectionClass = new \ReflectionClass($entity);        if (empty($annotationReader->getClassAnnotation($reflectionClass, CustomAnnotation::class))) {            continue;        }        foreach ($reflectionClass->getProperties() as $property) {            if (empty($annotationReader->getPropertyAnnotation($property, CustomPropertyAnnotation::class))) {                continue;            }            $propertyName = $property->getName();            $propertyValue = $property->getValue($entity);        }    }
打开App,查看更多内容
随时随地看视频慕课网APP