Thứ hai, 30/12/2013 | 00:00 GMT+7

Cách tạo ứng dụng web với HMVC PHP5 Framework Kohana

Ta bắt đầu loạt bài của bạn với việc nói về Kohana và quá trình cài đặt của nó. Vì khung công tác không yêu cầu bất kỳ cấu hình hoặc sửa đổi bổ sung nào, ta đã sẵn sàng để bắt đầu tìm hiểu kiến thức cơ bản về phát triển ứng dụng web bằng khung công tác Kohana.


Trong bài viết DigitalOcean này, ta sẽ tìm hiểu cách Kohana được thiết kế để hoạt động cùng với các phần quan trọng nhất của nó. Ta sẽ xem qua mẫu HMVC (Hierarchical Model View Controller) và tìm hiểu cách tạo một trong mỗi mẫu - và làm cho chúng hoạt động cùng nhau!

Lưu ý: Đây là bài viết thứ hai trong loạt bài Kohana của ta , tập trung vào làm việc với framework. Để xem phần đầu tiên liên quan đến việc cài đặt nó, hãy xem Bắt đầu với Kohana . Để biết cách triển khai ứng dụng web dựa trên Kohana, hãy xem Triển khai ứng dụng web PHP dựa trên Kohana .

Bảng chú giải


1. Quy ước về cấu hình


2. Các lựa chọn của Kohana và các quy ước của nó


1. File Naming 2. Coding Style 

3. Kohana và Mô hình MVC


4. Bộ điều khiển - “C” của Mẫu MVC


1. Conventions 2. How does it work? 

5. Hành động


1. Conventions 2. How does it work? 

6. Mô hình - “M” của Mô hình MVC


1. Conventions 2. How does it work? 

7. Chế độ xem - “V” của Mẫu MVC


1. Conventions 2. How does it work? 

8. Định tuyến


1. Conventions 2. How does it work? 

9. Xử lý lỗi với Kohana


1. Registering HTTP Error Page Controllers 2. Throwing HTTP Errors 

10. Phiên và Cookie


1. Sessions 2. Cookies 

Quy ước về cấu hình


Trong lập trình ứng dụng, Quy ước trên cấu hình (hoặc mã hóa theo quy ước) là một thuật ngữ được sử dụng để mô tả một loại thiết kế nhất định (tức là cấu trúc / mô hình hóa ứng dụng) theo đó các ứng dụng tin tưởng rằng mã được xây dựng tôn trọng các luật và hướng dẫn cốt lõi ( tự động kết nối Mô hình với Bộ điều khiển - xác định bằng tên).

Mô hình phát triển ứng dụng này được sử dụng để giảm tất cả các loại tùy chọn (và nhu cầu) khó hiểu, quá phức tạp và không cần thiết cho các cấu hình cổ điển dựa trên file (ví dụ: config.xml). Nó dựa trên các thành phần [hình thành ứng dụng] tuân theo các quy ước đã được cài đặt để mọi thứ hoạt động trơn tru - do đó loại bỏ nhu cầu cấu hình bổ sung.

Sự phụ thuộc chặt chẽ của Kohana vào khái niệm này làm cho nó trở thành một trong những cách dễ nhất và đơn giản nhất để làm việc với các khuôn khổ. Nếu bạn tuân theo các quy ước của Kohana (bao gồm - và rất quan trọng - phong cách mã hóa), mọi thứ sẽ dễ dàng hơn để tạo và duy trì.

Các lựa chọn của Kohana và các quy ước của nó


Đặt tên file


Để tạo điều kiện cho PHP'S tự động điền các file được yêu cầu (tức là những file được tạo sau này), Kohana sử dụng một phong cách chặt chẽ: chữ cái đầu tiên của tên lớp được viết hoa và dấu gạch dưới được sử dụng để phân tách từng từ tạo thành nó - theo Tiêu chuẩn tự động điền PSR-0 .

Thí dụ:

#  Class Name             -     Class File Location 1. MyClass                      classes/MyClass.php 2. Controller_ClassOne          classes/MyWork/ClassOne.php 2. Controller_ClassTwo          classes/MyWork/ClassTwo.php 

Lưu ý: Lưu ý theo quy ước, tất cả các file xác định lớp phải tồn tại trong folder classes .

Kiểu mã hóa


Mặc dù không hoàn toàn cần thiết, vì những lý do đã đề cập ở trên, Kohana khuyên bạn nên gắn bó với kiểu BSD / Allman khi viết mã của bạn .

Quá trình này bao gồm việc có các dấu ngoặc nhọn trên dòng riêng của chúng.

Thí dụ:

// for (int i=0; i<x; i++) if (a == b) {     proc1(); }  finally(); 

Lưu ý: Dấu ngoặc nhọn theo sau tên lớp phải ở cùng một cấp.

Thí dụ:

class MyClass { // ... // .. /  . 

Hãy nhớ: Để tìm hiểu thêm về các quy ước của Kohana, bạn có thể chọn tham khảo tài liệu của nó ở đây .

Kohana và mô hình MVC


Phần này và các phần liên quan sau đây (Bộ điều khiển, Hành động, Mô hình, Chế độ xem) tạo thành phần chính đầu tiên của nguyên tắc cơ bản về phát triển ứng dụng với Kohana - tạo các thủ tục (chức năng) để xử lý các yêu cầu. Các phần sau phần này bao gồm các lĩnh vực chính khác (ví dụ: xác định tuyến đường, xử lý lỗi, v.v.). Bạn nên thử các ví dụ này trên server của bạn nhiều như bạn muốn để cảm thấy thoải mái trước khi chuyển sang xây dựng ứng dụng sẵn sàng production .

Như ta đã thảo luận ở phần trước, Kohana sử dụng mẫu MVC (H) để xử lý các yêu cầu. Các ứng dụng được phát triển bằng Kohana tốt hơn nên tuân theo phong cách này một cách triệt để nhất có thể để tạo ra các chương trình hoạt động trơn tru.

Bộ điều khiển - “C” của Mẫu MVC


Bộ điều khiển là các file văn bản thuần túy tạo thành một trong những phần chính của quá trình xử lý một yêu cầu đến. Nó dán các phần còn lại tạo thành mẫu MVC và làm cho tất cả chúng làm việc cùng nhau để tạo và trả lại phản hồi. Mỗi yêu cầu đến, sau khi được định tuyến, sẽ được chuyển đến một bộ điều khiển phù hợp và được xử lý bằng cách gọi một hành động (ví dụ: print_names).

Quy ước


Các quy ước của Kohana cũng áp dụng cho các bộ điều khiển của nó và do đó, mỗi bộ điều khiển phải:

  • Tồn tại dưới classes/Controller/* .

  • Có tên của nó trùng với tên file (tức là Name.php Controller_Name bên trong classes/Controller/ như Name.php ).

  • Tuân theo phần còn lại của các quy ước đặt tên và tạo kiểu.

  • Mở rộng lớp Controller cha.

Ví dụ:

# Each one of the below examples represent the top - # section (definition) of a class on a single [class] file.   # Example [1] // classes/Controller/ClassOne.php class Controller_ClassOne extends Controller {  # Example [2] // classes/Controller/Namegroup/ClassOne.php class Controller_Namegroup_ClassOne extends Controller {  # Example [3] // classes/Controller/ClassTwo.php class Controller_ClassTwo extends Controller_ClassOne { 

Làm thế nào nó hoạt động?


Bộ điều khiển hoạt động tương tự như bên dưới:

  • Yêu cầu - Bộ điều khiển nhận dữ liệu yêu cầu được bao bọc dưới dạng một đối tượng, được gắn với biến [đối tượng] $this->request .

  • Với Mô hình - Bộ điều khiển truyền thông tin đến các mô hình để sửa đổi database và các đối tượng dữ liệu và chúng yêu cầu / nhận dữ liệu từ các mô hình để xử lý dữ liệu (có thể chuyển qua các khung nhìn).

  • Với Chế độ xem - Bộ điều khiển, sau khi xử lý thông tin nhận được với yêu cầu và dữ liệu từ các mô hình, chuyển thông tin này bởi lớp chế độ xem để trả về phản hồi cuối cùng cùng với bản trình bày của nó (tức là chế độ xem).

  • Phản hồi - Bộ điều khiển trả về phản hồi cuối cùng được bao bọc dưới dạng một đối tượng [biến] được xác định bởi $this->response (ví dụ: có thể đặt nội dung cuối cùng của chế độ xem qua $this->response->body($my_resp) )

Hành động


Các hành động là các thủ tục [công cộng] (tức là các hàm) được định nghĩa dưới các lớp. Chúng bao gồm các lệnh được gọi cho các yêu cầu được xử lý.

Quy ước


Theo quy ước của Kohana, các hành động phải có:

  • tiền tố action_ thêm vào trước tên của họ. (tức là action_print_names ).

  • phân loại công khai (tức là public function action_print_names() ).

  • $this->response->body($view) được đặt ở cuối chu kỳ thực thi của chúng để trả về một chế độ xem cho user .

Lưu ý: Có hai ngoại lệ chính cho các hành động. Đó là:

  • before ( public function before() ) - Được sử dụng để mã được thực thi trước mọi thứ.

  • after ( public function after() ) - Được sử dụng để thực thi mã sau mọi thứ.

Mô hình - “M” của Mô hình MVC


Mô hình trong Kohana là các file văn bản thuần túy chứa các lớp hoặc các đối tượng tạo / chứa dữ liệu khác đại diện cho lớp ngay trên database (hoặc bất kỳ nguồn dữ liệu nào). Bản chất khác biệt của các loại đối tượng này (tức là những đối tượng được sử dụng để đại diện cho dữ liệu thực tế) làm cho các mô hình trở thành những mảnh ghép hoàn hảo của mô hình MVC bằng cách cho phép tách biệt tất cả các thủ tục liên quan đến việc trực tiếp tạo, sửa đổi, cập nhật hoặc xóa dữ liệu.

Quy ước


Theo quy ước, các lớp được định nghĩa trong các mô hình - tương tự như Bộ điều khiển - phải:

  • Tồn tại dưới classes/Models/* .

  • Đặt tên của nó trùng với tên file (tức là Model_Name bên trong classes/Model/ as Name.php ).

  • Tuân theo phần còn lại của các quy ước đặt tên và tạo kiểu.

  • Mở rộng lớp Model cha.

Làm thế nào nó hoạt động?


Thông thường các mô hình sử dụng giải pháp Ánh xạ quan hệ đối tượng (ORM) để hiển thị dữ liệu và cách thức tương tác với nó với các lớp bộ điều khiển. Kohana đi kèm với module ORM của riêng nó cho phép thiết kế và tạo các đối tượng có cấu trúc rất tốt.

Khi nhận được một lệnh (có thể với các biến khác), mô hình thực hiện các hành động mong muốn để gửi lại phản hồi cho yêu cầu dữ liệu hoặc cập nhật database với những gì đã cho.

Chế độ xem - “V” của Mẫu MVC


Xem các file tạo thành mọi thứ liên quan đến đại diện của phản hồi cuối cùng. Tất nhiên, các file này không trực tiếp chứa tài nguyên của bên thứ ba (ví dụ: hình ảnh hoặc các phụ thuộc thời gian chạy khác); tuy nhiên, chúng tạo thành cơ sở cho những gì sẽ được cung cấp cho user cuối. Nếu bạn đang thiết kế một API dựa trên web, các chế độ xem được dùng để trả về dữ liệu mong muốn theo cách có cấu trúc dễ bảo trì. (ví dụ: phản hồi json cho một yêu cầu ajax).

Khi làm việc với các dạng xem, tốt nhất là nên tránh xa tất cả các thao tác logic mà nếu không sẽ sửa đổi dữ liệu được biểu diễn từ các file dạng xem. Chế độ xem nên được sử dụng (càng nhiều càng tốt) để hình thành cách dữ liệu được hiển thị.

Quy ước


  • Các file xem phải tồn tại trong folder views/ (ví dụ: views/login.php )

  • Họ nên “câm” nhất có thể.

  • Chúng không nên được sử dụng cho bất kỳ việc gì khác ngoài việc sử dụng dữ liệu được cung cấp để tạo thành một biểu diễn.

Làm thế nào nó hoạt động?


Để tạo dạng xem cuối cùng, bộ điều khiển chuyển một trọng tải (dữ liệu) nhất định đến (các) file dạng xem mà xử lý theo cách của chúng (ví dụ: lặp qua danh sách để tạo thành các cột của bảng). Sau khi biên dịch mọi thứ (tệp mẫu với tải trọng / dữ liệu được xử lý), biểu diễn của chế độ xem được bộ điều khiển chuyển giao như là phản hồi cuối cùng cho yêu cầu.

định tuyến


Như ta đã lập sơ đồ và thảo luận trong bài viết đầu tiên của ta trong loạt bài Kohana, mỗi yêu cầu được phân tích cú pháp (xử lý) và định tuyến. Cách thức hoạt động này chủ yếu được đặt ra bởi cách các tuyến đường được xác định trong ứng dụng của bạn.

Các phần tử này tạo thành các mẫu được so trùng với các yêu cầu (theo thứ tự được viết ra) để quyết định hành động nào sẽ gọi với tải trọng yêu cầu.

Quy ước


Trừ khi bạn đang nghiêm túc phát triển một module của riêng nó, các tuyến đường thường được xác định trong file bootstrap.php - ở phần cuối.

Các định nghĩa về cơ chế định tuyến này cực kỳ linh hoạt và rộng rãi trong cách chúng hoạt động - có lẽ là linh hoạt nhất tồn tại. Bạn có thể sử dụng chúng để đạt được những điều tuyệt vời rất đơn giản - chỉ theo các schemas chính xác.

  • Tất cả các tên tuyến đường phải là duy nhất.

  • Chúng phải được định nghĩa tuyến đường mặc định.

  • Không được chứa các tham số mã thông báo đặc biệt ( (), <> ).

Thí dụ:

# Route Syntax: set([name], [pattern]) # Pattern Syntax: (.. item ..)  <- optional elements,                   <controller>  <- match a  controller,                   <action>      <- match an action,                   <id>          <- request variable  # Example [1] Route::set('default', '(<controller>(/<action>(/<id>)))') ->defaults(array(     'controller' => 'Welcome',     'action'     => 'index', ));   # Route explained: # By default, match all requests - optionally with: #                                  /controller, and, #                                - optionally with: #                       /controller/action,     and, #                /controller/action/id # Use controller "Welcome" by default if none other matched, # Use action "index" by default if one is not matched.  # Example [2] Route::set('logops', '<action>', array(     'action' => '(login|logout)' )) ->defaults(array(     'controller' => 'logops', ));   # Route explained: # Match all incoming requests to /login and /logout with # "logops" controller and call the related action (i.e. login or logout) 

Lưu ý: Ngay sau khi một tuyến đường được khớp, quy trình sẽ dừng lại. Do đó, tất cả các tuyến bổ sung (tức là tất cả các tuyến mặc định) phải được tạo trước tuyến mặc định.

Làm thế nào nó hoạt động?


Các đối tượng yêu cầu, khi được so trùng với một tuyến đường, sẽ được chuyển cùng với dữ liệu của chúng. Quá trình đối sánh và định tuyến yêu cầu này bao gồm:

  • Khớp một yêu cầu với một tuyến đường

  • Tìm các lớp liên quan trong folder classes/Controller .

  • Tìm bộ điều khiển.

  • Tìm và gọi hành động của bộ điều khiển có thể gọi được.

  • Trả lại phản hồi (tức là chế độ xem ).

Xử lý lỗi với Kohana


Cùng với kiểm thử đơn vị, xử lý lỗi (theo cách lành mạnh) là một trong những phần quan trọng nhất của hầu hết mọi ứng dụng. Kohana, sử dụng ErrorException của PHP, biến lỗi thành ngoại lệ và cho phép xử lý chúng với những người trợ giúp của nó.

Đăng ký bộ điều khiển trang lỗi HTTP


Một ứng dụng web mạnh mẽ sẽ xử lý tốt các lỗi và đưa ra kết quả (tức là phản hồi) cho user của nó một cách chính xác. Với mục đích này, Kohana cung cấp một hệ thống xử lý lỗi đặc biệt (không có ý định chơi chữ - xem ở trên).

Để đăng ký một trang lỗi HTTP để đưa ra các ngoại lệ:

class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 {      public function get_response()     {         $response = Response::factory();         $view     = View::factory('errors/404');          $view->message = $this->getMessage();         $response->body($view->render());          return $response;     }  } 

Xử lý lỗi HTTP


Kohana có một cơ chế xử lý lỗi rất tốt và dễ vận hành để ném lỗi / ngoại lệ HTTP.

Thí dụ:

# To create an error (exception) for 404 - Not Found Error throw HTTP_Exception::factory(404, 'Not Found'); 

Phiên và Cookie


Để tạo điều kiện làm việc với các phiên và cookie, Kohana cung cấp các lớp trợ giúp cho phép bạn làm việc với từng phiên một cách an toàn.

Phiên


Khi làm việc với các phiên, bạn cần có một biến truy cập vào phiên bản .

# Accesing the session instance $session = Session::instance(); 

Thông qua quyền truy cập của bạn vào cá thể phiên, bạn có thể nhận được tất cả chúng trong một mảng với các thông số sau:

# Accessing the session variables $svars = $session->as_array(); 

Để thêm một giá trị mới vào các biến phiên:

# Usage: $session_instance->set($session_key, $value); $session->set('uid', 1234567890); 

Để nhận giá trị của một:

# Usage: $session_instance->get($session_key, $optional_default_value); $uid = $session->get('uid', 0); 

Và cuối cùng, để loại bỏ:

# Usage: $session_instance->delete($session_key); $session->delete('uid'); 

Bánh quy


Kohana chỉ giao dịch với các cookie an toàn. Đối với điều này, một chuỗi, set-as và được gọi là Cookie::$salt phải được định nghĩa trong file bootstrap.php như sau:

# Usage: Cookie::$salt = 'secure_cookie_key';  Cookie::$salt = '1234567890'; 

Để đặt giá trị cookie, bạn có thể sử dụng theo cách tương tự như bạn đã làm với Sessions:

# Usage: Cookie::set($cookie_key, $cookie_value); Cookie::set('uid', 1234..); 

Để nhận giá trị của cookie:

# Usage: $variable = Cookie::get($cookie_key, $optional_default_value); $var = Cookie::get('uid', 0); 

Và cuối cùng, để xóa:

# Usage: Cookie::delete($cookie_key); Cookie::delete('uid'); 

Lưu ý: Để tìm hiểu về cách làm việc với cookie bằng Kohana và hơn thế nữa, hãy xem tài liệu chính thức của nó (ấn bản mới nhất).

<div class = “author”> Gửi bởi: <a
href = “https://twitter.com/ostezer”> Hệ điều hành Tezer </a> </div>


Tags:

Các tin liên quan

Hướng dẫn đơn giản về cách cài đặt ứng dụng trực diện web trên VPS
2013-12-09
So sánh web server (Rack) cho Ứng dụng Web Ruby
2013-11-25
So sánh các web server cho các ứng dụng web dựa trên Python
2013-10-28
Cách sử dụng node.js, request và cheerio để thiết lập Web-Scraping đơn giản
2013-09-16
Cách tạo một ứng dụng web nhỏ với CakePHP trên VPS (Phần 1)
2013-08-23
Cách mở rộng ứng dụng web trên Ubuntu 12.10
2013-04-11