FosRestBundle: คุณสมบัติเสมือนแบบไดนามิก

ใน FOSRestBundle : คำอธิบายประกอบ ฉันต้องการใช้ @VirtualProperty หลายรายการที่มีไดนามิก ชื่อเพราะฉันดึงชื่อคุณสมบัติจากฐานข้อมูล (จำนวนคุณสมบัติที่ไม่รู้จัก)

class User
{
   private $id;
   private $name;

   /**
    * @Serializer\VirtualProperty
    *
    * @return array
    */
   public function getSomeMethod()
   {
       return array('property_name1'=> 'value1', 'property_name2'=>'value2');
   }
}

โดยที่ property_name1 & property_name2 .. property_name3 .. ฯลฯ เป็นไดนามิกที่มีจำนวนอนันต์

ฉันต้องการตั้งค่าให้เป็นคุณสมบัติเสมือน แต่ละคุณสมบัติมีค่าสตริง

ฉันไม่ต้องการตั้งค่าให้เป็นอาร์เรย์ด้วยคุณสมบัติเดียว

หากไม่มีวิธีในการทำเช่นนี้ โปรดแจ้งให้เราทราบหากฉันสามารถทำงานเดียวกันจากคอนโทรลเลอร์ได้หรือไม่


person semsem    schedule 07.11.2016    source แหล่งที่มา
comment
คุณอาจสามารถทำได้โดยใช้ @Serializer\Inline เพื่อให้คุณสมบัติของอาร์เรย์ที่ซื้อมาเป็นคุณสมบัติของวัตถุหลัก   -  person qooplmao    schedule 07.11.2016
comment
ขอบคุณ ใช้งานได้อย่างมีเสน่ห์! โปรดโพสต์ในคำตอบใหม่เพื่อทำเครื่องหมายว่ายอมรับแล้ว   -  person semsem    schedule 07.11.2016


คำตอบ (2)


เดิมเป็นความเห็น...

คุณอาจสามารถทำได้โดยใช้ @Serializer\Inline เพื่อให้คุณสมบัติของอาร์เรย์ที่ซื้อมาเป็นคุณสมบัติของวัตถุหลัก

ข้อมูลเพิ่มเติมบางส่วน

สิ่งนี้จะช่วยให้คุณมีคุณสมบัติหรือคีย์/ค่าที่เปิดเผยและอาร์เรย์หรืออ็อบเจ็กต์ที่จะซื้อให้เป็นคุณสมบัติของอ็อบเจ็กต์หลัก

ตัวอย่างเช่น..

class Id
{
    /**
     * @Expose
     */
    private $id;

    //...
}

class Parent
{
    /**
     * @Expose
     * @Inline
     */
    private $id;

    /**
     * @Expose
     * @Inline
     */
    private $name = 'parent';

    /**
     * @Expose
     * @Inline
     */
    private [
        'key' => 'value',
    ];

    public function __construct()
    {
        $this->id = new Id('an-id');
    }
}

ขั้นแรกจะถูกแปลงเป็นอาร์เรย์ที่คล้ายกับต่อไปนี้ในระหว่างการทำให้เป็นอนุกรม

[
    'id' => 'an-id',
    'name' => 'parent',
    'key' => 'value',
]
person qooplmao    schedule 07.11.2016

เนื่องจาก FOSRestBundle ใช้ JMSSerializer ข้างใต้ และคุณต้องการที่จะสามารถควบคุมสิ่งที่ซีเรียลไลเซอร์ส่งคืนได้อย่างเต็มที่ และข้อมูลเอาต์พุตขึ้นอยู่กับอินพุตที่ได้รับอย่างมาก คุณจึงสามารถเขียนตัวจัดการแบบกำหนดเองสำหรับคลาสใดคลาสหนึ่งโดยเฉพาะได้

สำหรับข้อมูลรายละเอียดเพิ่มเติมโปรดดู:

person martin    schedule 07.11.2016