介绍
由于框架不需要任何额外的配置或修改,我们准备开始学习使用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,请参阅 其官方文档(最新版本)。