亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

識別哪些類具有注釋并獲取也具有注釋的屬性的值

識別哪些類具有注釋并獲取也具有注釋的屬性的值

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 關注
  • 118 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號