Zend_Layout เปล่าและ Zend_View

โดย Watkin Steven Lloyd , Tuesday 10 สิงหาคม 2010 23:47

ในบทความนี้ผมมองที่การใช้ Zend_Layout และ Zend_View พร้อมกับควบคุมด้านหน้าง่ายๆในการแสดงให้เห็นว่ามันเป็นไปได้ที่จะเริ่มต้นเหตุผลทางธุรกิจและการนำเสนอในการแยกใบสมัครของคุณ รหัสทั้งหมดสามารถใช้ได้ใน GitHub :
Zend_Layout เปล่าและ Zend_View บน GitHub .

MVC

ทั่วไป รูปแบบการออกแบบ สำหรับการใช้งานเว็บเป็นรูปแบบที่ทันสมัย ​​MVC Zend Framework โหมด'สแต็กเต็มในการเป็นหนึ่งในการดำเนินการตาม MVC ใน PHP และประกอบด้วยสามส่วนคือ

  • Model (M)
  • View (V)
  • Controller (C)

รูปแบบดังกล่าวได้รับการออกแบบธุรกิจและตรรกะที่นำเสนอจะถูกแยกจากกันอย่างสมบูรณ์ (กับเหตุผลทางธุรกิจในรูปแบบและการนำเสนอในมุมมอง) และควบคุมการนั่งอยู่ตรงกลางการทำ"วงดนตรี"

การนำเสนอและสลอจิก

ใน Zend Framework ดูจะถูกจัดการโดยทั้งสองส่วนหลัก : Zend_View และ Zend_Layout Zend_Layout เป็นชื่อแนะนำดูหลังจากด้านรูปแบบของไซต์ (โดยทั่วไปหัวกระดาษท้ายกระดาษ sidebars, ฯลฯ ) Zend_View focusses ในการนำเสนอข้อมูลว่ารูปแบบของคุณได้ทำงานในการผลิตหรือได้รับมา

ในฐานะนักพัฒนาและการใช้งานของพวกเขามีวิวัฒนาการเรามีแนวโน้มที่จะเคลื่อนผ่านขั้นตอนต่างๆโดยทั่วไปแต่ละการปรับปรุงในการบำรุงรักษาก่อนการปรับปรุงและขยาย หนึ่งในประเด็นหลักก็คือการนำเสนอและลอจิกยังได้รับ intermingled และมันไม่ง่ายที่จะเริ่มแยกสอง

เกิดอะไรขึ้นกับการผสมสอง?

Ostrich มีเหตุผลหลายประการที่การผสมส่วนต่างๆของโปรแกรมเช่นนักออกแบบการทำงานบนเว็บไซต์ของคุณอาจไม่ต้องการ (หรือมีความรู้) เพื่อสแกนรอบในรหัสพยายามในการทำงานจากสถานที่ที่จะทำการเปลี่ยนแปลงงานนำเสนอ ในทำนองเดียวกับนักพัฒนา (ถ้าคุณเป็นเหมือนเช่นฉันคนที่มีทักษะการออกแบบของนกกระจอกเทศ) อาจแบ่งออกในเหงื่อเย็นเมื่อคุณพูดถึงงานออกแบบหรือ UI

นอกจากนี้ถ้าต่อมาสิ่งที่คุณต้องการนำเสนอให้กับไซต์ของคุณในสื่อต่างๆเช่นโทรศัพท์มือถือแท็บเล็ตพีซีหรือเปิดเผยข้อมูลผ่านทางบริการเว็บ (XML / JSON / etc)? มีการนำเสนอแบบผสมและตรรกะคุณยืนเกือบจะไม่มีความหวังโดยไม่ต้องแฮ็กน่าเกลียดมากที่จะดึงงานนำเสนอกลับออกจากรหัสของคุณก่อนการฉีดสิ่งใหม่ ๆ ถ้าข้อมูลและนำเสนอได้รับการแยกการเปลี่ยนแปลงเหล่านี้จะน่ารำคาญเกือบสร้างสคริปต์มุมมองใหม่สำหรับรูปแบบใหม่และการร้องขอโดยตรงตามความเหมาะสม

การแยกสอง

ในการพัฒนาโปรแกรมประยุกต์ไม่เคยได้ประหยัดในการเริ่มต้นการดำเนินการแก้ปัญหา MVC เต็มและการประยุกต์ใช้จะต้องมีการอพยพมาช้า -- บางครั้งใช้รหัสเดิมควบคู่ไปกับการใหม่ มันอาจจะว่ามีฝูงของตรรกะ (เช่นการตั้งค่าการเชื่อมต่อฐานข้อมูลรับรองความถูกต้อง, การจัดการกับคุกกี้และอื่น ๆ ) ที่ยังไม่พร้อมสำหรับการฝึกการติดตั้งกรอบเลือกของคุณจึงรหัสเดิมและเป็นที่รู้จักไปทำงานจะสามารถดำเนินการต่อไป ใช้จนกว่าจะถึงเวลาดังกล่าวจะสามารถเขียนใหม่ / refactored

หมายเหตุ : Zend_Layout การใช้และ Zend_View เช่นนี้เป็นที่ยอมรับอย่างสมบูรณ์ภายในกรอบแนวนอนและกรอบ Zend ได้รับการออกแบบโดยที่ส่วนประกอบแต่ละคนสามารถนำไปใช้โดยไม่ต้องกรอบส่วนที่เหลือของ ประโยชน์มากในการใช้งานได้ตลอดเวลาอาจเป็นหนึ่งในเหตุผลที่สำคัญสำหรับการดูดซึมสูงในโปรแกรมประยุกต์ขององค์กร

Front Controller

ต่อไปนี้ฉันจะสร้างตัวควบคุมด้านหน้า -- ไฟล์เดียวที่ออกแบบมาเพื่อรับคำขอใด ๆ ที่ไม่ตรงกับไฟล์บนระบบไฟล์ นี้มักจะประสบความสำเร็จโดยใช้ไฟล์ htaccess. เช่นเดียวที่ใช้ในการติดตั้งค่าเริ่มต้น Zend Framework ภายในตัวควบคุมหน้าฉันจะได้รับการตั้งค่ารูปแบบและมุมมองของเราและแสดงที่ส่วนต่างๆของใบสมัครลงไป

  define (dirname'APP_PATH', (__FILE__). '/..');
 / ส่งออก buffering / Start
 ob_start ();

 / / สร้างอินสแตนซ์ Zend_View
 Zend_Layout : : startMvc ();
 $ เค้าโครง Zend_Layout = : : getMvcInstance ();
 $ setLayoutPath เค้าโครง -> (APP_PATH.'รูปแบบ / สคริปต์ /')
     -- setViewSuffix> ('phtml')
     -- setLayout> ('ดัชนี');

 $ = $ getView มุมมองเค้าโครง -> ()
     -- setScriptPath> (APP_PATH'ดู / สคริปต์ /'.)
     -- addHelperPath> (. APP_PATH'ห้องสมุด / / Zend / ดู / Helper','Zend_View_Helper');

 / / URL ที่ตั้งฐาน -- ok * * เกือบเปลือยกาย แต่คุณไม่จำเป็นต้องนี้
 getInstance () --> setBaseUrl ($ _SERVER ['HTTP_HOST']); : Zend_Controller_Front :

 try {
     / **
      * ดำเนินการประยุกต์ใช้เส้นทางบาง ...
      * -- สามารถจะใช้หน้านี้เป็นตัวควบคุมและสั่งการคำขอทั้งหมด
      * ผ่านนี้ไฟล์เดียว (ในกรณีไฟล์ไม่อยู่ในระบบไฟล์
      * -- หมายเหตุวิธีการด้านล่างนี้เป็นเพียงการสาธิตจริงๆก็จะเป็น
      * น่ากลัวกับเว็บไซต์ขนาดใหญ่
      * /
     สวิทช์ ($ ['หน้า'] _GET) {
    	 'ดัชนี'กรณี :
    	 'ยกเว้น'กรณี :
    		 pageName = $ $ ['หน้า'] _GET;
    		 แบ่ง;
    	 เริ่มต้น :
    		 $ pageName = false;
    		 แบ่ง;
     }
     / / ตัวอย่างของหน้าไม่ได้พบ ...
     ถ้า (เท็จ === $ pageName) {
         $ responseHeader ='HTTP/1.1 404 Page Not Found';
         โยน Exception ใหม่ ('ไม่พบหน้า');
     }

     / **
      * เพิ่มข้อมูลลงในมุมมองของคุณวัตถุที่นี่
      * คุณอาจมีการควบคุมของคุณเองหรือบางส่วนรวมถึงไฟล์
      * ที่เหตุผลทางธุรกิจบางส่วนจะถูกแยกออกจากตรรกะดู
      * /
     displaytext $ - view> ='Hello จาก Lloyd';
     buttonText $ - view> ='I \'M ไม่ใช้งาน'!;

	 ("phtml {$ pageName}.") $ เค้าโครง -> = เนื้อหาที่ทำให้ $ ดู ->;
     echo แสดงผลรูปแบบ> - $ ();
 } catch (Exception $ E) {
	 / / Clean buffered ออกแล้วเนื้อหา -- เราไม่ต้องการที่จะแสดงว่า!
	 ob_clean ();
     if (! isset ($ responseHeader)) {
    	 $ responseHeader ='HTTP/1.1 500 Internal Server Error';
     }
     ส่วนหัว ($ responseHeader);
     ยกเว้น $ - view> = $ E;
     $ เค้าโครง -> = เนื้อหาที่ทำให้ $ ดู -> ('error.phtml');
     echo แสดงผลรูปแบบ> - $ ();
 } 

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

ถัดไปเช่น MVC ใหม่ของ Zend_Layout ถูกสร้างขึ้นและเราบอกว่าออกสคริปเลย์เอาต์มี phtml นามสกุล, ที่ถูกค้นพบในไดเรกทอรีนอกเส้นทางสาธารณะและที่เค้าโครงเริ่มต้นของเราจะเรียกว่าดัชนี (. phtml) จากรูปแบบที่เราแล้วดึงวัตถุมุมมอง (ที่เราตั้งค่าข้อมูลของเราที่จะนำเสนอ) และใช้การตั้งค่าที่คล้ายกัน

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

ส่วนที่เหลือของรหัสใบสมัครเป็นห่อขณะนี้อยู่ในลอง {จับ} {} บล็อก ถ้ามีอะไรโยนยกเว้น uncaught เราสามารถจับมันและแสดงข้อความแสดงข้อผิดพลาดที่ดีที่ผู้ใช้

งานแรกของเราในการจับลอง {} {} คือการร้องขอเส้นทาง, สิ่งที่จะผู้ใช้ต้องการจะดูของเราหรือไม่ นี่ฉันจะได้ใช้รหัสการสาธิตบางอย่างง่ายมากที่ฉันจะตรวจสอบค่าของ'หน้า'รับตัวแปร การกำหนดเส้นทางได้อย่างอื่น ๆ อีกมากมายที่ซับซ้อนของคุณ เส้นทางที่ใช้เรียกสิ่งที่รหัสเคยจะต้องมีการดำเนินการเพื่อให้ได้ / จัดการกับข้อมูลที่มาจากผู้ใช้และระบบที่จะบอกสิ่งที่มุมมอง (และสคริปเลย์เอาต์อาจจะ) ที่จะใช้

ท้ายที่สุดถ้าเราเตอร์ของเราไม่ตรงกับหน้ามันตั้งรหัส 404 การตอบสนองและแสดงหน้าดีไม่พบข้อความที่ผู้ใช้ใด ๆ ที่นี่เราโยนและจับข้อยกเว้นของเรา (และข้อยกเว้นทั่วไปอย่างที่ว่า) แต่อาจคุณต้องการจะขว้างปาข้อยกเว้นของคุณเองจากภายในรหัสของเราเตอร์

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

ครั้งนี้เสร็จสมบูรณ์แล้วเราก็ทำให้มุมมองกับข้อมูลของเรา หากรหัสพ่น uncaught ยกเว้นด้วยเหตุผลใด ๆ นี้ติดอยู่ใกล้กับด้านล่างของสคริปต์ ที่นี่เราล้างบัฟเฟอร์ออกแล้วให้ตั้งค่าส่วนหัวของการตอบสนอง 500, และบอกใบสมัครของเราที่จะให้สคริปมุมมอง'ข้อผิดพลาด'(ซึ่งโดยทั่วไปรุ่นปล้นลงมากของรูปแบบปกติดู / และบันทึกข้อผิดพลาดในการตรวจสอบในภายหลัง)

เป็นมุมมองมีการแสดงครั้งแรกและฉีดเข้าไปในรูปแบบก็เป็นไปได้ในการเปลี่ยนแปลงรูปแบบจากภายในมุมมองและแน่นอนชุดพิเศษที่ต้องการเช่นนั้น

  • ชื่อหน้า
  • เมตาแท็ก
  • สคริป (URL หรือ code) ลงในส่วน <head>
  • เพิ่มรูปแบบเพิ่มเติมและอื่น ๆ

นอกจากนี้ยังเป็นไปได้ในการเปลี่ยนแปลงรูปแบบทั้งจากภายในมุมมองโดยใช้ ...

  เค้าโครง () <PHP $ this -?> --> setLayout ('alternativeLayout')>? 

... ขณะที่และเมื่อจำเป็น

สุดท้าย ...

ฉันหวังว่านี้ได้รับการแนะนำที่เป็นประโยชน์เพื่อ Zend_Layout และ Zend_View และมันจะช่วยให้คุณสามารถเริ่มต้นการใช้ MVC ขั้นพื้นฐานของคุณเองและปรับปรุง maintainibility การขยาย / ของรหัสของคุณ โปรดดูที่รหัสที่มาสำหรับตัวอย่างของการใช้งาน (ดูไฟล์ README สำหรับคำแนะนำ)

รหัสอนุมานว่าคุณได้แล้วได้ autoloading ทำงาน (หรือคุณได้รวมชั้นเรียนจำเป็นต้อง) นอกจากนี้ผมไม่อยากจะแนะนำให้คุณใช้การกำหนดเส้นทางหรือข้อมูลการตั้งค่าข้างต้นนี้มากง่ายมากสำหรับการสาธิต หากต้องการดูโค้ดเต็มดูที่รหัสที่มาที่เชื่อมโยงที่บทความด้านบนนี้

Zend Framework รุ่น : 1.10.6

One Response to"Zend_Layout เปล่าและ Zend_View"

  1. เขียนดีและให้ข้อมูลมากที่สุดขอบคุณ!

ปล่อยให้ตอบกลับ













ชุดรูปแบบพาโนรามาโดย Themocracy

7 ผู้เข้าชมออนไลน์ขณะนี้
5 แขก, 2 บอ, 0 สมาชิก
ผู้เข้าชมสูงสุดวันนี้ : 23 ที่ 04:19 UTC
เดือนนี้ : 26 ที่ 2011/07/05 12:35 UTC
ปีนี้ : 130 ที่ 28-03-2011 10:40 UTC
เวลาทั้งหมด : 130 ที่ 28-03-2011 10:40 UTC