Naked Zend_Layout và Zend_View
Trong bài viết này, tôi nhìn vào sử dụng Zend_Layout và Zend_View cùng với một bộ điều khiển phía trước đơn giản để cho thấy làm thế nào có thể bắt đầu tách logic kinh doanh và trình bày trong đơn của bạn. Tất cả các mã có sẵn trên github:
Naked Zend_Layout và Zend_View trên GitHub .
MVC
Một phổ biến mẫu thiết kế cho các ứng dụng web hiện đại, là mô hình MVC. Các Zend Framework đầy đủ stack "chế độ" là một trong những thực hiện của MVC trong PHP và bao gồm ba phần:
- Model (M)
- Xem (V)
- Điều khiển (C)
mô hình này được thiết kế sao cho kinh doanh và logic trình bày là hoàn toàn tách biệt với nhau (với kinh doanh logic trong mô hình, và trình bày trong khung nhìn) và bộ điều khiển ngồi giữa thực hiện việc "dàn nhạc".
Trình bày và Logic
Trong Zend Framework xem được xử lý bởi hai thành phần chính: Zend_View và Zend_Layout. Zend_Layout như tên cho thấy có vẻ sau khi bố trí các khía cạnh của trang web (nói chung các tiêu đề, footers, sidebars, vv.) Zend_View focusses về trình bày các dữ liệu mô hình của bạn đã được làm việc để sản xuất hoặc thu được.
Là người phát triển, và các ứng dụng của họ, phát triển chúng ta có xu hướng di chuyển qua các giai đoạn khác nhau, thường mỗi cải tiến một ngày trước đó nâng cao khả năng bảo trì và mở rộng. Một trong những vấn đề chính là các bài trình bày và logic vẫn nhận được xen kẽ và không phải của nó đơn giản để bắt đầu tách hai.
Có gì sai với pha trộn hai?
Có một số lý do tại sao trộn các phần khác nhau của ứng dụng, ví dụ như một nhà thiết kế làm việc trên trang web của bạn có thể không muốn (hoặc có kiến thức) để quét xung quanh trong mã cố gắng để làm việc ra nơi để thay đổi trình bày. Trong cùng một cách một nhà phát triển (nếu bạn đang như tôi ai có kĩ năng thiết kế của một đà điểu) có thể bùng phát trong một mồ hôi lạnh khi bạn đề cập đến thiết kế, làm việc UI.
Ngoài ra bạn nếu sau đó những gì muốn trình bày các trang web của bạn trên phương tiện truyền thông khác nhau, chẳng hạn như điện thoại di động, máy tính bảng, hoặc phơi bày những dữ liệu thông qua các dịch vụ web (XML / JSON / etc)? Có trình hỗn hợp và logic bạn đứng gần như không có hy vọng mà không có một số hacks rất xấu xí để kéo trình bày lại trong code của bạn, trước khi tiêm một cái gì đó mới. Nếu dữ liệu và trình bày đã được tách ra những thay đổi này hầu như không đáng kể, tạo ra một kịch bản xem mới cho các định dạng mới và yêu cầu trực tiếp cho phù hợp.
Tách hai
Trong một ứng dụng của nó luôn luôn phát triển không kinh tế để bắt đầu thực hiện một giải pháp MVC đầy đủ và ứng dụng cần được di chuyển chậm - đôi khi chạy mã cũ song song với các mới. Nó có thể là có khối lượng của logic (chẳng hạn như thiết lập kết nối cơ sở dữ liệu, chứng thực, xử lý cookie, vv) mà không phải là sẵn sàng cho việc đúc để thiết lập các khuôn khổ lựa chọn của bạn, do đó tuổi và để biết-là-làm việc mã có thể tiếp tục được được sử dụng cho đến khi thời gian đó nó có thể được viết lại / tái cấu trúc.
Lưu ý: Zend_Layout Sử dụng và Zend_View như thế này là hoàn toàn chấp nhận được trong Zend Framework và khung cảnh đã được thiết kế như vậy mà thành phần riêng biệt có thể được sử dụng mà không phần còn lại của framework. Một lợi thế lớn trong các ứng dụng phát triển và có lẽ là một trong những lý do chính cho sự hấp thu cao của nó trong các ứng dụng doanh nghiệp.
Mặt trận Controller
Dưới đây tôi tạo ra một bộ điều khiển phía trước - một tập tin duy nhất được thiết kế để nhận các yêu cầu mà không phải là lần xuất hiện vào một tập tin trên hệ thống tập tin. Điều này thường đạt được bằng cách sử dụng một tập tin htaccess. Chẳng hạn như một mặc định được sử dụng trong Zend Framework cài đặt. Trong điều khiển phía trước, tôi sẽ được thiết lập bố cục và điểm của chúng tôi và hiển thị, nơi các phần khác nhau của các phiếu ứng dụng vào nó.
define ('APP_PATH', dirname (__FILE__).'/..'); / / Bắt đầu sản xuất đệm ob_start (); / / Tạo một thể hiện Zend_View Zend_Layout:: startMvc (); $ Bố trí = Zend_Layout:: getMvcInstance (); $ Bố trí-> setLayoutPath (APP_PATH. 'Bố trí / / script') -> SetViewSuffix ('phtml') -> SetLayout ('chỉ'); $ Xem = $ bố trí-> getView () -> SetScriptPath (APP_PATH 'xem / / script'.) -> AddHelperPath (. APP_PATH 'thư viện / / Zend / Xem / Người giúp đỡ', 'Zend_View_Helper'); / / Thiết lập cơ sở URL - * ok gần như * trần truồng, nhưng bạn không cần! Zend_Controller_Front:: getInstance () -> setBaseUrl ($ _SERVER ['HTTP_HOST']); try { / ** * Thực hiện một số ứng dụng định tuyến ... * - Có thể được sử dụng như một bộ điều khiển phía trước và chỉ đạo tất cả các yêu cầu * Thông qua một tập tin này (được cung cấp tập tin không tồn tại trong hệ thống tập tin * - Lưu ý phương pháp dưới đây chỉ thực sự cho cuộc biểu tình, nó sẽ là * Khủng khiếp với một trang web lớn * / switch ($ _GET ['page']) { trường hợp "chỉ số": trường hợp 'ngoại lệ': $ Pagename = $ _GET ['page']; break; mặc định: $ Pagename = false; break; } / / Ví dụ về một trang web không được tìm thấy ... if (false === $ pagename) { $ ResponseHeader = 'HTTP/1.1 404 Không tìm thấy'; ném ngoại lệ mới ("Trang không tìm thấy '); } / ** * Thêm dữ liệu để xem đối tượng của bạn ở đây * Bạn có thể đã thực hiện điều khiển của riêng bạn hoặc một số bao gồm các tập tin * Mà logic kinh doanh là một phần tách ra từ logic xem * / $ View-> displayText = 'Xin chào từ Lloyd'; $ View-> buttonText = 'I \' m không hoạt động!; $ Bố trí-> nội dung = $ view-> render (". {$ PAGENAME} phtml"); echo $ bố trí-> render (); } Catch (Exception $ e) { / / Làm sạch nội dung đã được đệm - chúng tôi không muốn hiển thị đó! ob_clean (); if (! isset ($ responseHeader)) { $ ResponseHeader = 'HTTP/1.1 500 Internal Server Error "; } tiêu đề ($ responseHeader); $ View-> ngoại lệ = $ e; $ Bố trí-> nội dung = $ view-> render ('error.phtml'); echo $ bố trí-> render (); }
Trước hết chúng tôi bắt đầu đệm đầu ra, bằng cách làm này chúng ta có thể thiết lập các tiêu đề của chúng tôi tại bất kỳ điểm nào trong yêu cầu và biết rằng nó có thể gửi cho họ. Nếu một ngoại lệ được ném ra tại bất kỳ giai đoạn thực thi mã của chúng ta sạch bộ đệm này và viết ra hoặc nội dung thông báo lỗi và bố trí. Điều này đảm bảo rằng chúng tôi không cung cấp một phần kết xuất nội dung có chứa lỗi cho người dùng cuối.
Tiếp theo một MVC mới thể hiện của Zend_Layout được tạo ra và chúng tôi nói với nó mà ra lệnh bố trí có phtml gia hạn, phải được tìm thấy trong một thư mục bên ngoài của con đường nào, và rằng cách bố trí mặc định của chúng tôi được gọi là chỉ số (phtml.). Từ bố trí, chúng tôi sau đó giải nén các đối tượng xem (mà chúng tôi tập hợp dữ liệu của chúng tôi để được trình bày) và áp dụng các thiết lập tương tự.
Tiếp theo chúng ta thiết lập các đối tượng xem với một tham chiếu đến Zend_View người giúp đỡ mặc định. Xem người trợ giúp là tập hợp các chức năng tiện lợi khác. Ví dụ, viết trong một định dạng tiền tệ thả nổi, hoặc tạo ra một bảng sọc ngựa vằn (chúng có thể được đọc về tại đây ). Bằng cách mở rộng Zend_View_Helper_Abstract và thêm thư viện riêng của bạn vào thời điểm này có thể có của nó để sử dụng riêng của người trợ giúp ứng dụng của bạn xem.
Phần còn lại của các mã ứng dụng hiện đang được bọc trong một khối {thử bắt}} {. Nếu bất cứ điều gì ném uncaught một ngoại lệ chúng ta có thể bắt nó và hiển thị một thông báo lỗi tốt đẹp cho người dùng cuối.
Nhiệm vụ đầu tiên của chúng tôi trong cố gắng bắt {} {} là yêu cầu tuyến đường, chúng tôi những gì người dùng muốn xem? Ở đây tôi đã thực hiện một số mã trình diễn rất đơn giản mà tôi kiểm tra giá trị của các 'trang' được biến. định tuyến của bạn có thể rất phức tạp hơn nhiều. Việc định tuyến được sử dụng để gọi những gì bao giờ mã cần được thực hiện để có được / xử lý dữ liệu được cung cấp bởi người sử dụng và để cho hệ thống những gì xem (và có thể bố trí script) để sử dụng.
Cuối cùng nếu router của chúng tôi không phù hợp với bất kỳ trang nào nó đặt một mã phản hồi 404 và hiển thị một trang đẹp không tìm thấy thông điệp cho người dùng cuối. Ở đây, chúng tôi ném và bắt ngoại lệ riêng của chúng tôi (và một trường hợp ngoại lệ rất chung chung tại đó) nhưng có lẽ bạn muốn được ném ngoại lệ riêng của bạn từ bên trong mã router.
Một khi chúng tôi đã thành công chuyển yêu cầu của chúng tôi, chúng tôi có thể bắt đầu làm điều gì đó với mã. Nó có thể là bạn có bộ điều khiển riêng của bạn / mô hình triển khai thực hiện hoặc bạn có bao gồm một số mã đó đã được tách ra phần nào. Ở đây tôi đặt một vài biến đơn giản đến các đối tượng xem.
Một khi điều này được hoàn thành, chúng tôi chỉ đơn giản là làm cho quan điểm với các dữ liệu của chúng tôi. Nếu mã ném uncaught một ngoại lệ vì lý do nào bị mắc kẹt này là gần cuối của kịch bản. Ở đây chúng tôi rõ ràng đã đệm đầu ra, thiết lập một tiêu đề phản ứng 500, và nói với ứng dụng của chúng tôi để làm cho xem kịch bản 'lỗi' (mà thường là phiên bản nhiều tước xuống của bố trí bình thường / xem và ghi lại những lỗi để kiểm tra sau này).
Khi xem là ra đầu tiên và tiêm vào cách bố trí nó có thể thay đổi cách bố trí từ bên trong xem, và thực sự thiết lập tính năng bổ sung cần thiết, ví dụ,
- Tiêu đề trang
- Meta tags
- Scripts (URL hoặc code) vào phần <head>
- Thêm các kiểu dáng bổ sung, vv
Ngoài ra nó còn có thể thay đổi cách bố trí toàn bộ từ trong tầm nhìn bằng cách sử dụng ...
bố trí () <php $ this-?> -> setLayout ('alternativeLayout')>? ... Như và khi cần thiết.
Cuối cùng ...
Tôi hy vọng điều này đã được giới thiệu một cách hữu ích để Zend_Layout và Zend_View và nó sẽ cho phép bạn để bắt đầu thực hiện MVC của chính cơ bản của bạn và cải thiện các maintainibility / mở rộng của mã của bạn. Xin hãy xem mã nguồn của ví dụ về cách sử dụng (xem tập tin README để được hướng dẫn).
Mã này giả định rằng bạn đã có tự động load làm việc (hoặc bạn có bao gồm các lớp yêu cầu). Ngoài ra, tôi sẽ không khuyên bạn thực hiện các định tuyến, dữ liệu thiết lập như trên, điều này rất đơn giản sẽ cho trình diễn. Để xem các mã đầy đủ hãy xem mã nguồn được liên kết ở đầu bài viết này.
Zend Framework phiên bản: 1.10.6

















































Cũng bằng văn bản và thông tin chi tiết nhất, cảm ơn!