จะเพิ่มไฟล์จาวาสคริปต์ภายนอกลงในแอปพลิเคชัน Zend Framework 2 ได้อย่างไร

ฉันต้องเพิ่ม jQuery และไฟล์ javascript อื่น ๆ ในโครงการ Zend Framework ของฉัน ฉันกำลังพยายามทำมันด้วยตัวควบคุม Action: -

public function userinfoAction()
{   
    $this->view->headScript()->appendFile($basePath .'/js/validate_jquary.js');
    $this->headScript()->appendFile('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'); 
    return new ViewModel();
}

แต่มันไม่ทำงาน


person Mangala Edirisinghe    schedule 27.04.2012    source แหล่งที่มา
comment
คุณหมายถึงอะไรโดย 'ไม่ทำงาน'? คุณกำลังสะท้อน $this->headScript() ในเค้าโครงหรือมุมมองของคุณหรือไม่? นอกจากนี้ การที่คุณมีคำสั่ง return ในการดำเนินการของคุณดูไม่เหมาะสมสำหรับฉัน แม้ว่าฉันจะไม่คุ้นเคยกับ ZF2 ก็ตาม ดังนั้นจึงอาจใช้ได้   -  person vascowhite    schedule 27.04.2012
comment
@ vascowhite: ฉันเป็น ecoho $this->headScript() ในคอนโทรลเลอร์   -  person Mangala Edirisinghe    schedule 30.04.2012
comment
คุณไม่ควรสะท้อนสิ่งใดในคอนโทรลเลอร์ซึ่งจะทำให้ MVC เสียหาย คุณควรทำเช่นนั้นในมุมมองหรือเค้าโครง   -  person vascowhite    schedule 30.04.2012


คำตอบ (7)


ต่อไปนี้คือวิธีที่คุณสามารถใช้ตัวช่วยดู จากภายในตัวควบคุม ใน ZF2 เพื่อแก้ไขปัญหาของคุณ:

public function someAction()
{                 
     $this->getViewHelper('HeadScript')->appendFile($basePath . '/js/somejs.js');    
}

protected function getViewHelper($helperName)
{
    return $this->getServiceLocator()->get('viewhelpermanager')->get($helperName);
}
person aimfeld    schedule 30.11.2012
comment
+1 สำหรับการให้ตัวอย่างจากคอนโทรลเลอร์ รู้สึกสกปรกเมื่อเพิ่มสคริปต์และสไตล์จากมุมมอง แต่ดูเหมือนว่าตัวอย่างมากมายของ ZF2 จะแนะนำว่านี่เป็นเรื่องปกติ ข้อใดถือเป็นวิธีการเพิ่มสคริปต์/สไตล์ที่ถูกต้อง - person dKen; 30.06.2014

 $this->HeadScript()->appendFile('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js','text/javascript');
 $this->HeadScript()->appendFile('http://localhost/zend/public/js/validate_jquary.js','text/javascript');

ใช้ได้กับโค้ดนี้ในมุมมอง แต่ฉันไม่รู้ว่าวิธีนี้ถูกต้องหรือไม่

person Mangala Edirisinghe    schedule 30.04.2012

อาจเป็นวิธีที่ง่ายที่สุดในการใช้ตัวช่วยดูจากภายในคอนโทรลเลอร์ใน ZF2 คือผ่านวัตถุตัวแสดงผล:

public function someAction()
{                 
     $renderer = $this->serviceLocator->get('Zend\View\Renderer\RendererInterface');
     $renderer->headScript()->appendFile($renderer->baseUrl() . '/js/somejs.js');
}
person aimfeld    schedule 30.11.2012

คุณสามารถลองสิ่งนี้ได้ มันทำงานได้ดีสำหรับฉัน

//เขียนบรรทัดเหล่านี้ใน SampleController ของคุณ

public function someAction()
{

$this->getViewHelper('HeadScript')->appendFile('/js/yourjsfile.js');
$this->getViewHelper('HeadScript')->appendFile('/js/jquery/jquery.min.js');
}

// เขียนวิธีการต่อไปนี้ในคอนโทรลเลอร์

protected function getViewHelper($helperName)
{

    return $this->getServiceLocator()->get('viewhelpermanager')->get($helperName);
}
person syamasundar chettu    schedule 10.04.2013

คุณไม่ได้ใช้มุมมองเพื่อเพิ่ม jquery:

 $this->view->headScript()->appendFile('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
person Ashley    schedule 27.04.2012

วิธีที่ดีสำหรับสิ่งนั้นคือการใช้โค้ดด้านล่างในการทำงานของคอนโทรลเลอร์ของคุณ สมมติว่าคุณต้องการรวม paginator.js

$this->view->headScript()->appendFile($this->view->baseUrl().'/js/paginator.js');
person Fawad Ghafoor    schedule 02.05.2012

ทั้งหมดข้างต้นทำให้เกิดข้อผิดพลาดมากมายสำหรับฉันและ $this->view->headScript() เป็นเรื่องเกี่ยวกับ Zend Framework 1 เลย สิ่งนี้ใช้ได้กับฉัน:

ในคอนโทรลเลอร์ของคุณก่อนที่คำจำกัดความคลาสของคอนโทรลเลอร์จะเพิ่ม:

use Zend\View\Helper\HeadScript;

จากนั้นคุณอาจใช้สิ่งนี้ในคอนโทรลเลอร์ของคุณ (แน่นอนว่าคุณสามารถใช้มันในการดำเนินการใด ๆ ไม่ใช่แค่ในตัวสร้าง):

/**
 * @var Zend\View\Helper\HeadScript
 */
protected $headScript;

function __construct() {
    $this->headScript = new HeadScript();
    $this->headScript->appendFile('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js','text/javascript');
}

จากนั้นคุณควรเพิ่มสิ่งนี้ลงในเลย์เอาต์ของคุณ:

<?php echo $this->headScript(); ?>
person trushkevich    schedule 15.11.2012