__toString() ต้องส่งคืนค่าสตริงเมื่อส่งแบบฟอร์ม

ฉันมีมุมมองการแสดงที่ต้องปรับแต่งเล็กน้อยเพื่อให้เราสามารถแก้ไขสิ่งต่าง ๆ ในนั้นได้ ในบรรดาสิ่งเหล่านี้ มีตัวเลือกหลายรายการซึ่งเป็นผลลัพธ์ของการสืบค้นเพื่อกรองโรงเรียนที่ฉันได้ทำในคอนโทรลเลอร์ ซึ่งส่งผ่านวิธีการเรนเดอร์

ก่อนหน้านั้น ฉันใช้แบบฟอร์มเลือกหลายรายการแบบกลุ่มต่อกลุ่มเพื่อเลือกทุกโรงเรียนที่เคยบันทึกไว้ในฐานข้อมูล ตอนนี้ฉันต้องการใช้มันเพื่อที่ฉันจะได้ใช้สิ่งที่ได้ผลอยู่แล้ว

เนื่องจากมันถูกส่งผ่านการเรนเดอร์ ไม่ใช่แบบฟอร์ม ฉันจึงสามารถสร้างแบบฟอร์ม HTML เพื่อแสดง และเพื่อดูสิ่งที่ถูกเลือกเมื่อฉันส่งแบบฟอร์ม อย่างไรก็ตาม ฉันมีปัญหาหลายประการ:

ประการแรก ต้องการเป็นอินสแตนซ์ของวัตถุ และสามารถบันทึกวัตถุแทนอาร์เรย์ได้ ฉันจัดการได้โดยทำสิ่งต่อไปนี้:

        $object = new Ecole();
        foreach ($ecolesDispo as $key => $value)
        {
            $object->$key = $value;
        }
        $mission->addEcolesDispo($object);

(Ecole มีไว้สำหรับโรงเรียน)

ปัญหาที่ฉันติดอยู่ตอนนี้เกิดขึ้นหลังจากนั้น เพราะตอนนี้มันต้องการให้แปลงเป็นสตริง แต่ฉันทำไม่ได้

ส่วนที่เกี่ยวข้องในเอนทิตีของฉันมีลักษณะดังนี้

/**
 * Constructor
 */
public function __construct()
{
    $this->ecolesDispo = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * @return string
 */
public function __toString()
{
    return (string) $this->addEcolesDispo($object);
//Not sure about that part though
}

/**
 * Add ecolesDispo
 *
 * @param \EcoleBundle\Entity\Ecole $ecolesDispo
 *
 * @return Mission
 */
public function addEcolesDispo(\EcoleBundle\Entity\Ecole $ecolesDispo)
{
    $this->ecolesDispo[] = $ecolesDispo;

    return $this;
}

/**
 * Remove ecolesDispo
 *
 * @param \EcoleBundle\Entity\Ecole $ecolesDispo
 */
public function removeEcolesDispo(\EcoleBundle\Entity\Ecole $ecolesDispo)
{
    $this->ecolesDispo->removeElement($ecolesDispo);
}

/**
 * Get ecolesDispo
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getEcolesDispo()
{
    return $this->ecolesDispo;
}

ฉันจะแปลงสิ่งนี้เป็นสตริงได้อย่างไร

ขอบคุณล่วงหน้า


person Jaeger    schedule 27.07.2016    source แหล่งที่มา
comment
นั่นคือเอนทิตีอะไร มันเป็นเอนทิตีภารกิจหรือไม่? นอกจากนี้ คุณสามารถแสดงรหัส Ecole Entity ได้หรือไม่ คุณต้องการแสดงอะไรด้วยฟังก์ชัน __toString() กันแน่?   -  person Alvin Bunk    schedule 27.07.2016


คำตอบ (2)


ฟังก์ชัน __toString ของคุณควรมีลักษณะดังนี้:

public function __toString()
{
    return $this->id; // Because __toString seems to be called to set your $key variable...
}

-> พึ่งพาคุณสมบัติสตริง

ในฟังก์ชัน __toString() คุณใช้ (string) ซึ่งจะเรียก ... __toString() โดยปริยายเพื่อแปลง $this เป็นสตริง นั่นจะเป็นการโทรแบบวงกลม

person Alsatian    schedule 27.07.2016

ลองทำเช่นนี้หากมีตัวแปรสตริง ชื่อ ในเอนทิตีที่คุณใช้ __toString หรือใช้คุณสมบัติประเภทสตริงใดๆ ของเอนทิตีนั้นซึ่งระบุเอนทิตีนั้นเอง

public function __toString()
{
    // Or change the property that you want to show 
    return $this->name; 
}
person Yash Sharma    schedule 09.11.2016