Zend_Layout เปล่าและ Zend_View
ในบทความนี้ผมมองที่การใช้ 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 และมันไม่ง่ายที่จะเริ่มแยกสอง
เกิดอะไรขึ้นกับการผสมสอง?
มีเหตุผลหลายประการที่การผสมส่วนต่างๆของโปรแกรมเช่นนักออกแบบการทำงานบนเว็บไซต์ของคุณอาจไม่ต้องการ (หรือมีความรู้) เพื่อสแกนรอบในรหัสพยายามในการทำงานจากสถานที่ที่จะทำการเปลี่ยนแปลงงานนำเสนอ ในทำนองเดียวกับนักพัฒนา (ถ้าคุณเป็นเหมือนเช่นฉันคนที่มีทักษะการออกแบบของนกกระจอกเทศ) อาจแบ่งออกในเหงื่อเย็นเมื่อคุณพูดถึงงานออกแบบหรือ 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


















































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