Zend Framework Per Cài đặt Giao diện Module - Follow Up
Là một theo dõi bài viết trước đây của tôi trên mỗi cách bố trí các thiết lập dựa trên mô-đun cho Zend Framework , tôi đã cập nhật các mã yêu cầu cấu hình ít hơn trước (không phải là nó đòi hỏi nhiều hơn là một vài dòng trong cấu hình ứng dụng của bạn!).
Một lần nữa chúng ta sử dụng một điều khiển Zend hành động trợ giúp gọi nó từ khởi động như sau:
/ **
* Thiết lập các kịch bản bố trí trên một cơ sở cho mỗi mô-đun
* /
bảo vệ chức năng _initLayoutHelper ()
{
$ This-> khởi động ('frontController');
$ Bố trí = Zend_Controller_Action_HelperBroker:: addHelper (
mới Pro_Controller_Action_Helper_SetLayoutPath (APPLICATION_PATH));
}
Hầu như chính xác giống như trước khi trừ thời gian này chúng tôi vượt qua APPLICATION_PATH liên tục vào các nhà xây dựng là con đường cơ sở của chúng tôi.
Tiếp theo các hành động trợ giúp điều khiển chính nó bây giờ trông như sau:
/ ** * Thiết lập đường dẫn bố trí trên cơ sở mỗi mô-đun * * @ Tác giả Lloyd Watkin * @ Kể từ 16/02/2010 * @ Gói Pro * @ Subpackage Controller_Action_Helper * / / ** * Thiết lập đường dẫn bố trí trên cơ sở mỗi mô-đun * * @ Tác giả Lloyd Watkin * @ Kể từ 16/02/2010 * @ Gói Pro * @ Subpackage Controller_Action_Helper * / lớp Pro_Controller_Action_Helper_SetLayoutPath mở rộng Zend_Controller_Action_Helper_Abstract { / ** * Base con đường * * @ Var chuỗi * / bảo vệ $ _path; / ** * Xây dựng * * @ Param string $ đường * / công chức năng __construct (đường dẫn) { $ This-> setBasePath (đường dẫn); } / ** * Thiết lập cơ sở đường * * @ Param string $ đường * / chức năng công cộng setBasePath (đường dẫn) { if (is_string (đường dẫn) |! | rỗng (đường dẫn)) { ném ngoại lệ mới ('trừ chuỗi cho con đường cơ sở'); } $ This-> _path = $ con đường; } / ** * Nhận con đường cơ sở * * @ Trả lại chuỗi * / bảo vệ chức năng _getBasePath () { if (is_null ($ this-> _path)) { if (! quy định ('APPLICATION_PATH')) { ném ngoại lệ mới ('con đường cơ bản không thể được xác định'); } $ This-> _path = APPLICATION_PATH; } trở lại _path $ this->; } / ** * Thiết lập đường dẫn bố trí dựa trên mô-đun * / chức năng công cộng preDispatch () { $ Module = preg_replace ( '/ [^ AZ] / i','', $ this-> getRequest () -> getModuleName () ); if ($ bootstrap = $ this-> getActionController () -> GetInvokeArg ('khởi động')) { $ Xem = $ bootstrap-> getResource ('xem'); $ LayoutPath = $ this-> _getBasePath (). "/ Modules / {$ module} / bố trí / scripts /"; / * Nếu bố trí tồn tại thư mục sau đó áp dụng nó, nếu không chỉ giảm * Trở lại mặc định * / if (is_dir ($ layoutPath)) { $ This-> getActionController () -> GetHelper ("bố trí") -> SetLayoutPath ($ layoutPath); $ View-> headLink () -> appendStylesheet ( "/ Phong cách / {$ module} / style.css" ); } } } }
Lưu ý việc thông qua con đường cơ sở của chúng ta (x. APPLICATION_PATH) trong xây dựng, chúng tôi cũng có một getter và setter cho con đường cơ bản. Không giống như các phiên bản trước của mã này nếu bố trí đường dẫn không tồn tại thì mã số sẽ giảm trở lại con đường bố trí mặc định. Nếu con đường cơ sở không được thiết lập, nó sẽ cố gắng xác định con đường cơ bản từ các APPLICATION_PATH liên tục, nếu không ngoại lệ được ném. Tôi cũng đã cheekily ném trong một bảng dựa trên kiểu module cho biện pháp tốt
Việc bố trí dựa trên module được xác định từ việc bố trí đường dẫn kịch bản tồn tại (rõ ràng phương pháp này có thể thay đổi dễ dàng). Điều này thêm một chi phí nhỏ từ các thiết lập application.ini (tuy nhiên nếu con đường bố trí tồn tại PHP sẽ cache kết quả cho * hiệu suất) nhưng bù lại bạn có được sự tiện ích dễ dàng rơi vào mô-đun mới.
Vậy đó, không có nhiều khác nhau, nhưng bạn không cần phải thêm một mục nhập cấu hình mới mỗi lần bạn muốn thêm một module mới:)
* Để xóa cache này (nếu cần) sử dụng clearstatcache chức năng.


















































Hi, xin vui lòng cho tôi biết nơi để tạo ra Pro_Controller_Action_Helper_SetLayoutPath lớp mà tên tập tin
Tôi là người mới trong Zend.
cảm ơn
Hi Behrang, tạo ra các helper hành động với bất cứ tên nào bạn muốn, tôi có "thư viện" của riêng mình với không gian tên "Pro". Bạn có thể chỉ là một cách dễ dàng gọi 'SetLayoutPath' lớp và đặt nó ở nơi nào bạn thích, cung cấp các mã có thể tìm thấy nó và bạn mở rộng các lớp học yêu cầu