为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
qq_花开花谢_0 2023-08-06 14:39:47
我最初的想法是创建一个格式生成器。比如写下一些文本,然后写下一些用大括号括起来的变量,然后写下那些具有实际值的变量,我想让我的系统知道哪些类可以用于格式化以及系统可以使用它的哪些属性。让我们假设,在此图像中,始终检索 id 为 1 的对象,并且 id 始终存在(忘记绘制它)我想要做的是让一个或多个带有注释的类,然后识别哪些类具有该注释,并让我知道它们是哪些类。在上面的示例中,那些可用的类应该在下拉列表中/* * @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 注释;
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

以下是查找实体及其带注释的属性的代码示例。您可以将结果放在某处。但是,如果不替换带注释的实体,您将可以使用所有属性,因此也许您需要创建一个侦听器,它将侦听 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);

        }

    }


查看完整回答
反对 回复 2023-08-06
  • 1 回答
  • 0 关注
  • 53 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信