Zend Framework ต่อการวางรูปแบบโมดูล -- ตามงาน

โดย Watkin Steven Lloyd , Tuesday 16 กุมภาพันธ์ 2010 20:48

ในฐานะที่ติดตามการโพสต์ก่อนหน้านี้ของฉันใน โมดูลต่อการวางรูปแบบตาม การ Zend Framework เราได้ปรับปรุงก่อนที่รหัสขึ้นไป แต่ไม่จำเป็นต้องกำหนดค่าแล้ว (ไม่ว่าจะต้องเพิ่มเติมว่าไม่กี่บรรทัดในการกำหนดค่าใบสมัครของคุณ!)

อีกครั้งเราจะใช้ประโยชน์จาก การดำเนินการช่วยเหลือ Zend Controller อ้างจาก bootstrap ดังต่อไปนี้

     / **
      * ตั้งค่า สคริปเลย์เอาต์ บนพื้นฐานต่อโมดูล
      * /
     _initLayoutHelper ฟังก์ชั่นการป้องกัน ()
	 {
	     $ this -> bootstrap ('frontController');
	     $ เค้าโครง = Zend_Controller_Action_HelperBroker : : addHelper (
	         Pro_Controller_Action_Helper_SetLayoutPath ใหม่ (APPLICATION_PATH));
	 }

เกือบจะว่ากันเป็นมาก่อนยกเว้นครั้งนี้พวกเราผ่าน APPLICATION_PATH คงเป็นตัวสร้างฐานของเราเป็นเส้นทาง

ถัดไปผู้ช่วยดำเนินการควบคุมตัวเองขณะนี้มีลักษณะดังต่อไปนี้

 / **
  * ตั้งค่าเส้นทางรูปแบบบนพื้นฐานต่อโมดูล
  *
  * @ ผู้เขียน Watkin Lloyd
  * @ ตั้งแต่ 16/02/2010
  แพคเกจ * @ Pro
  * subpackage @ Controller_Action_Helper
  * /

 / **
  * ตั้งค่าเส้นทางรูปแบบบนพื้นฐานต่อโมดูล
  *
  * @ ผู้เขียน Watkin Lloyd
  * @ ตั้งแต่ 16/02/2010
  แพคเกจ * @ Pro
  * subpackage @ Controller_Action_Helper
  * /
 Pro_Controller_Action_Helper_SetLayoutPath ชั้น
     Zend_Controller_Action_Helper_Abstract ขยาย
 {
	 / **
	  * เส้นทาง Base
	  *
	  * @ var สตริง
	  * /
	 ป้องกัน $ _path;

	 / **
	  * ก่อสร้าง
	  *
	  * @ param $ เส้นทางสาย
	  * /
	 ทำงานสาธารณะ __construct ($ ธ )
	 {
	     setBasePath $ this -> ($ เส้นทาง);
	 }

	 / **
	  * เส้นทางที่ตั้งฐาน
	  *
	  * @ param $ เส้นทางสาย
      * /
	 setBasePath ทำงานสาธารณะ ($ ธ )
	 {
		 ถ้า (is_string ($ ธ ) |! | ว่าง ($ เส้นทาง)) {
			 โยน Exception ใหม่ ('สตริงยกเว้นสำหรับเส้นทางฐาน');
		 }
		 $ this -> _path เส้นทาง = $;
	 }

	 / **
	  * รับเส้นทางฐาน
	  *
	  * สตริงกลับ @
	  * /
	 _getBasePath ฟังก์ชั่นการป้องกัน ()
	 {
		 ถ้า (is_null ($ this -> _path)) {
			 if (! กำหนด ('APPLICATION_PATH')) {
				 โยน Exception ใหม่ ('path Base ไม่สามารถหา');
			 }
			 $ this -> _path APPLICATION_PATH =;
		 }
		 กลับ _path $ this ->;
	 }

     / **
      * เส้นทางชุดรูปแบบขึ้นอยู่กับโมดูล
      * /
     preDispatch ทำงานสาธารณะ ()
     {
    	 $ โมดูล preg_replace = (
    	     '/ [^ AZ] / i', '', $ this -> getRequest () --> g​​etModuleName ()
    	 );

	     if ($ bootstrap = getActionController $ this -> ()
	                        -- getInvokeArg> ('bootstrap')) {

	         $ ดู = getResource $ bootstrap -> ('มุมมอง');
	         $ layoutPath = _getBasePath $ this -> ()
	             "/ โมดูล / {$} รูปแบบโมดูล / สคริปต์ / /";

	         / * ถ้าไดเรกทอรีที่มีอยู่แล้วใช้เลย์เอาต์ไว้มิฉะนั้นแล้วก็ตก
	          * กลับมาเริ่มต้น
	          * /
	         if (is_dir ($ layoutPath)) {
	             getActionController $ this -> ()
	                  -- getHelper> ('รูปแบบ')
	                  -- setLayoutPath> ($ layoutPath);
	             $ ดู -> headLink () --> appendStylesheet (
	                 "/ รูปแบบ / {$ โมดูล} style.css /"
	             );
	         }
    	 }
     }
 }

หมายเหตุผ่านของเส้นทางฐาน (เทียบ APPLICATION_PATH) ในคอนสตรัคของเราแล้วเรายังมี Getter และตัวตั้งค่าสำหรับเส้นทางฐาน ซึ่งแตกต่างจากรุ่นก่อนหน้าของรหัสหากเส้นทางการเลย์เอาต์ไม่มีแล้วรหัสจะถอยกลับเส้นทางรูปแบบเริ่มต้น หากเส้นทางหลักไม่ได้กำหนดก็จะพยายามที่จะกำหนดเส้นทางฐานจาก APPLICATION_PATH คงมิฉะนั้นจะโยนข้อยกเว้น ฉันยังได้โยน cheekily ในสไตล์ชีตโมดูลที่ใช้สำหรับการวัดที่ดี

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

ที่มันไม่แตกต่างกันมาก แต่คุณไม่จำเป็นต้องเพิ่มรายการการกำหนดค่าใหม่ทุกครั้งที่คุณต้องการที่จะเพิ่มโมดูลใหม่แต่ละ :)

* หากต้องการล้างแคชนี้ (ถ้าจำเป็น) ใช้ clearstatcache ฟังก์ชั่น

2 คำตอบไป"Zend Framework ต่อการวางรูปแบบโมดูล -- ติดตาม"

  1. Behrang says :

    สวัสดีกรุณาช่วยบอกฉันว่าจะสร้าง Pro_Controller_Action_Helper_SetLayoutPath ชั้นกับที่ชื่อไฟล์
    ฉันใน Zend Newbie
    ขอบคุณ

  2. Hi Behrang สร้างการดำเนินการกับผู้ช่วยเหลือใดชื่อที่คุณชอบฉันมี'ห้องสมุด'ของตัวเองกับมสเปซ'Pro' คุณได้อย่างง่ายดายเพียงแค่เรียกว่า'SetLayoutPath'ชั้นเรียนและนำไปใช้ที่เคยคุณต้องการให้รหัสสามารถค้นหาได้และคุณจำเป็นต้องขยายชั้นเรียน

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













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

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