แนวปฏิบัติที่ดีที่สุดในการเรนเดอร์หลายมุมมองโดยอิงตามข้อมูลไดนามิกเดียวกัน

ฉันต้องการที่จะมีข้อมูลบางอย่างต่อไปนี้:

  1. ฉันต้องการให้บางมุมมองได้รับการเรนเดอร์อย่างเป็นระบบ (ฉันสามารถเรียก $this->render จากเลย์เอาต์ของฉันสำหรับมุมมองเหล่านี้) โดยไม่คำนึงว่าตัวควบคุม/การดำเนินการใดถูกดำเนินการ
  2. อย่างไรก็ตาม เนื้อหาที่ใช้ในมุมมองเหล่านี้อิงตามข้อมูลที่สร้างขึ้นแบบไดนามิกเดียวกัน และโค้ดเบื้องหลังค่อนข้างซับซ้อน ดังนั้นฉันจึงไม่สามารถใส่ตรรกะในมุมมองสำหรับปัญหาการปรับให้เหมาะสม/ประสิทธิภาพที่ชัดเจนได้
  3. ฉันสามารถใช้ $this->_helper->actionStack ในคอนโทรลเลอร์แต่ละตัวเพื่อเรียกคอนโทรลเลอร์อื่นที่จะเตรียมข้อมูลสำหรับมุมมอง แต่ฉันต้องการทำโดยไม่ต้องแก้ไขคอนโทรลเลอร์ที่มีอยู่

ฉันอยากจะใส่อะไรบางอย่างลงในบูตสแตรปเนื่องจากสิ่งที่ฉันต้องการนั้นเป็นเรื่องปกติสำหรับแอปพลิเคชันของฉัน แต่ฉันไม่รู้ว่าต้องทำอย่างไร


person Max    schedule 30.07.2010    source แหล่งที่มา


คำตอบ (1)


นั่นคือสิ่งที่ View Helpers มีไว้
ใน View Helper คุณสามารถดึงข้อมูลของคุณ (ผ่านโมเดลหรือชั้นบริการ) และเตรียมข้อมูลสำหรับเอาต์พุต

<?php
class View_Helper_Foobar extends Zend_View_Helper_Abstract
{
    protected $_data;

    public function foobar()
    {
        if (null !== $this->_data) {
            $this->_data = some_expensive_data_getter();
        }

        return $this;
    }

    public function __toString()
    {
        return $this->view->partial('foobar.phtml', array('data' => $this->_data));
    }
}
person Benjamin Cremer    schedule 30.07.2010
comment
แน่นอนว่านั่นคือสิ่งที่พวกเขามีไว้ แต่สิ่งนี้ไม่ได้ตอบคำถามของฉันซึ่งไม่เกี่ยวกับวิธีการส่งข้อมูลไปยังมุมมอง แต่วิธีการเตรียมข้อมูลครั้งเดียวสำหรับหลายมุมมอง โดยไม่คำนึงถึงตัวควบคุม / การกระทำที่ดำเนินการโดยไม่ต้องแก้ไข (ถ้าเป็นไปได้) ผู้ควบคุมดังกล่าวข้างต้น - person Max; 30.07.2010
comment
ขยายคำตอบของฉันเล็กน้อย some_expensive_data_getter() ควรถูกเรียกเพียงครั้งเดียว - person Benjamin Cremer; 30.07.2010
comment
@ user359650 คุณยังคงใช้ foobar($data) เพื่อส่งข้อมูลจากมุมมองได้ - person takeshin; 31.07.2010