如何使用 HMVC PHP5 框架 Kohana 构建网络应用程序

介绍


由于框架不需要任何额外的配置或修改,我们准备开始学习使用Kohana框架的Web应用程序开发基础知识。

在这篇DigitalOcean文章中,我们将深入了解Kohana是如何设计的,以便与其最重要的部分一起工作,我们将通过HMVC( Hierarchical Model View Controller)模式学习如何创建一个 - 并使它们一起工作!

说明: 这是我们Kohana系列的第二篇文章,侧重于与框架合作。 要了解第一个安装问题,请检查从Kohana开始。 查看是否部署基于Kohana的网络应用程序,请检查部署基于Kohana的PHP网络应用程序.

词汇


1 关于配置的协议


2 科哈纳的选择及其公约


11. File Naming
22. Coding Style

第3章 科哈纳和MVC模式


控制器 - MVC 模式的C


11. Conventions
22. How does it work?

第5章:行动


11. Conventions
22. How does it work?

6. 模型 - MVC 模式的M


11. Conventions
22. How does it work?

7. 视图 - MVC 模式的V


11. Conventions
22. How does it work?

第8章:路线


11. Conventions
22. How does it work?

9 处理与Kohana的错误


11. Registering HTTP Error Page Controllers
22. Throwing HTTP Errors

10 会话和Cookies


11. Sessions
22. Cookies

关于配置的协议


在应用程序编程中, Convention-over-Configuration (或代码-by-convention)是一个用来描述某种类型的设计(即应用程序结构化 / 建模)的术语,其中应用程序相信构建的代码尊重规则和核心指令(即自动连接模型与控制器 - 使用名称识别)。

这种应用程序开发范式被用来减少各种混乱的、过于复杂的和不必要的选项(和需求)对于经典的,基于文件的配置(如 config.xml)。

Kohana对这一概念的严格依赖使其成为最简单和最简单的框架之一,如果你遵循Kohana的惯例(包括 - 而且非常重要的是 - 编码风格),一切都会更容易创建和维护。

Kohana的选择及其公约


文件命名


为了方便PHP的自动加载所需的文件(即后来创建的文件),Kohana使用一个严格的风格:类名称的第一个字母被资本化,并使用标签来分离形成它的每个单词 - 根据 PSR-0 自动加载标准

例子:

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

注意: 请记住,根据惯例,所有定义类的文件必须存在于目录中。

编码风格


虽然不是绝对必要的,但由于上述原因,Kohana建议在写代码时坚持BSD/Allman风格。

这个过程包括在自己的线上有弯曲的。

例子:

1// for (int i=0; i<x; i++)
2if (a == b)
3{
4    proc1();
5}
6
7finally();

注: 类名称之后的弯曲的支架必须在同一级别。

例子:

1class MyClass {
2// ...
3// ..
4/  .

记住: 要了解更多关于 Kohana 公约的信息,您可以选择参考位于 [这里] 的文档(http://kohanaframework.org/3.3/guide/kohana/conventions)。

科哈纳和MVC模式


本节和以下相关的部分(控制器、操作、模型、视图)构成了Kohana应用程序开发基础的第一大部分 - 创建程序(功能)来处理请求.之后的部分涵盖其他关键领域(如定义路线、处理错误等)。

正如我们已经讨论过的,Kohana使用(H)MVC模式来处理请求。使用Kohana开发的应用程序最好尽可能仔细地遵循这种风格,以创建流畅运行的程序。

控制器 - MVC 模式的C


控制器是简单的文本文件,构成处理入口请求的主要部分之一。它粘贴了组成MVC模式的其余部分,使它们一起工作,以创建和返回响应。

◎《公约》


Kohana 的公约也适用于其控制者,因此,每个控制者必须:

  • 在)。

例子:

 1# Each one of the below examples represent the top -
 2# section (definition) of a class on a single [class] file. 
 3
 4# Example [1]
 5// classes/Controller/ClassOne.php
 6class Controller_ClassOne extends Controller {
 7
 8# Example [2]
 9// classes/Controller/Namegroup/ClassOne.php
10class Controller_Namegroup_ClassOne extends Controller {
11
12# Example [3]
13// classes/Controller/ClassTwo.php
14class Controller_ClassTwo extends Controller_ClassOne {

它是如何工作的?


控制器工作类似于下面:

*请求 -- -- 主计长收到请求数据,作为物体包裹,附在[标 变量$->请求'上。 ***与模型** - 控制器将信息传递给模型来修改数据库和数据对象,它们要求/接收模型的数据来处理数据(可能通过视图传递). ***关于意见** -- -- 主计长在处理从模型收到的请求和数据中收到的资料后,由视图层通过这一信息,连同其列报方式(即观点)返回最后答复。 ***答复** -- -- 主计长返回最后答复,将其包装为$this->答复'所定义的对象可变

行动


操作是指在类中定义的(公共)程序(即函数),它们由处理请求的调用组成。

◎《公约》


根据Kohana的惯例, actions 必须有:

  • action_ 序列先定为它们的名称. (即 action_print_names)。 * public 分类(即 public function action_print_names())。 * $this->response->body($view) 设置在执行周期结束时返回用户的视图。

注意: 对行动有两个主要的例外,这些是:

before (public function before()) - 用来执行代码 before everything.* after (public function after())** - 用来执行代码 after everything。

模型 - MVC 模式的M


Kohana 中的模型是包含类或其他数据形成的文本文件 / 包含代表数据库(或任何数据源)的层层的对象。这些类型的对象(即用于代表实际数据的对象)的独特性质使 _models 成为 MVC 范式的完美部分,允许与直接创建,修改,更新或删除数据相关的所有程序的分离。

◎《公约》


根据惯例,在模型中定义的类 - 类似于控制器 - 必须:

  • 存在 ** 在 classes/Models/* . * 其名称与文件名匹配(即 Model_Name 中的 classes/Model/ 作为 Name.php)。

它是如何工作的?


通常模型使用一个对象关系 Mapper (ORM) 解决方案来暴露数据和与它交互的方式控制器类 Kohana 配备了自己的 ORM 模块,允许设计和创建非常有结构的对象。

收到命令后(可能有其他变量),模型执行所需的操作,以返回数据请求的响应,或更新数据库以所给定的内容。

查看 - MVC 模式的V


视图文件构成与最终响应的表示有关的一切。当然,这些文件不包含直接的第三方资源(例如图像或其他运行时间依赖);但是,它们是最终用户提供的内容的基础。

在使用视图时,最好避免任何逻辑操作,这些操作会改变从视图文件中表示的数据。

◎《公约》


  • 视图文件必须存在于) * 它们应该尽可能模糊 * 它们不应该 用于任何其他用途,而不是使用提供的数据来形成一个表示。

它是如何工作的?


为了形成最终视图,控制器将一定的负载(数据)传递到视图文件(文件)中,这些文件(文件)通过它们进行处理(例如,重复列表以形成表列)。

路由


正如我们在Kohana系列的第一篇文章中所描述和讨论的那样,每个请求都被解析(处理)和路由。

这些元素形成 patterns 与(以它们的写作顺序)请求相匹配,以决定请求有效载荷调用哪个 action

◎《公约》


除非您严格开发自己的模块,否则路径通常在bootstrap.php文件中定义 - 就在尽头。

这些路由机制定义在其运作方式上非常灵活和慷慨 - 也许是最灵活的存在 - 您可以使用它们来实现伟大的事情非常简单 - 只要遵循正确的方案。

  • 所有路线名称必须是唯一的 * 它们必须在默认路线之前定义 * 不得包含特殊的代币参数 ((), <>)。

例子:

 1# Route Syntax: set([name], [pattern])
 2# Pattern Syntax: (.. item ..)  <- optional elements,
 3                  <controller>  <- match a controller,
 4                  <action>      <- match an action,
 5                  <id>          <- request variable
 6
 7# Example [1]
 8Route::set('default', '(<controller>(/<action>(/<id>)))')
 9->defaults(array(
10    'controller' => 'Welcome',
11    'action'     => 'index',
12)); 
13
14# Route explained:
15# By default, match all requests - optionally with:
16#                                  /controller, and,
17#                                - optionally with:
18#                       /controller/action, and,
19#                /controller/action/id
20# Use controller "Welcome" by default if none other matched,
21# Use action "index" by default if one is not matched.
22
23# Example [2]
24Route::set('logops', '<action>',
25array(
26    'action' => '(login|logout)'
27))
28->defaults(array(
29    'controller' => 'logops',
30)); 
31
32# Route explained:
33# Match all incoming requests to /login and /logout with
34# "logops" controller and call the related action (i.e. login or logout)

注意: 一旦路线匹配,程序就会停止,因此,所有额外的路线(即所有路线的默认路线)必须在默认路线之前创建。

它是如何工作的?


请求对象,当与路线匹配时,将与其数据一起传输,该匹配和请求路由过程包括:

  • 匹配请求的路径 * 在)。

与Kohana处理错误


与单元测试一起,处理错误(以合理的方式)是几乎任何应用程序中最关键的部分之一 Kohana,使用PHP的 ErrorException ,将错误变成例外,并允许其与其助手一起处理。

注册 HTTP 错误页面控制器


一个强大的Web应用程序将处理错误,并提供结果(即响应)返回它的用户正确。

若要注册一个 HTTP 错误页面以排除例外:

 1class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 {
 2
 3    public function get_response()
 4    {
 5        $response = Response::factory();
 6        $view     = View::factory('errors/404');
 7
 8        $view->message = $this->getMessage();
 9        $response->body($view->render());
10
11        return $response;
12    }
13
14}

扔 HTTP 错误


Kohana有一个非常好的和易于操作的错误处理机制,用于扔 HTTP 错误 / 例外。

例子:

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

会话和Cookies


为了方便与会话和cookie的工作,Kohana提供辅助类,允许您安全地与每个协作。

会议


在与会话一起工作时,您需要有一个可访问 _session 实例的变量。

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

通过访问该会话实例,您可以将它们全部分成一个数组,其中包括以下内容:

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

将新值添加到会话变量:

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

要获得一个的价值:

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

最后,删除:

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

◎ 饼干


Kohana 只处理安全的 Cookie. 为此,在 bootstrap.php 文件中必须定义一个字符串,设置为和称为 Cookie::$salt 如下:

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

要设置 Cookie 值,您可以使用与 Sessions 相同的方式:

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

获取cookie的价值:

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

最后,删除:

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

注意: 若要了解如何使用 Kohana 和其他 Cookie,请参阅 其官方文档(最新版本)。

Submitted by: O.S. Tezer
Published At
Categories with 技术
comments powered by Disqus