如何建立与HMVC PHP5框架Kohana的Web应用程序

介绍

我们开始我们的系列谈论的Kohana及其安装过程。 由于框架不需要任何额外的配置或修改,我们准备开始使用Kohana框架学习Web应用程序开发基础。

在这篇DigitalOcean文章中,我们将会了解Kohana是如何设计的,以及它最重要的部分。 我们将讨论HMVC(分层模型视图控制器)模式,并学习如何创建一个 - 并让他们一起工作!

注:这是我们的Kohana系列的第二篇文章,重点与框架的工作。 看到的第一个关于它的安装,检查出入门的Kohana 要了解有关部署一个基于Kohana的Web应用程序,检查部署基于PHP的Kohana Web的应用程序

词汇表

1.配置约定

2. Kohana的选择及其约定

1. File Naming
2. Coding Style

3. Kohana和MVC模式

4.控制器 - “C”的MVC模式

1. Conventions
2. How does it work?

5.行动

1. Conventions
2. How does it work?

6.模型 - “M”的MVC模式

1. Conventions
2. How does it work?

7.查看 - MVC模式的“V”

1. Conventions
2. How does it work?

8.路由

1. Conventions
2. How does it work?

9.用Kohana处理错误

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

会议和Cookies

1. Sessions
2. Cookies

约定配置

在应用程序编程, 公约-过度配置 (或编码逐约定)是用于描述特定类型的设计的一个术语(即应用结构/建模),由此应用程序信任代码正在建造方面的规则和核心指令(即自动连接模型 - 使用名称识别)。

这种应用程序开发范例用于减少对于经典的,基于文件的配置(例如config.xml)的所有种类的混乱,过于复杂和不必要的选项(和需要)。 它基于组件[形成应用程序]遵循已经建立的约定,使事情顺利进行 - 因此消除了对额外配置的需要。

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

Kohana的选择及其约定

文件命名

为了便于所需文件的PHP的自动加载(即那些后来创建的),Kohana中采用了严谨的作风:类名称的第一个字母大写是和下划线用于每个字形成它分开-根据PSR-0标准的自动加载

例:

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

注:请记住,通过该公约,所有的类定义文件必须下存在classes目录。

编码风格

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

这个过程包括在自己的线上有大括号。

例:

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

finally();

注意:下面的类名花括号是要在同一水平。

例:

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

记住:要了解更多有关Kohana中的约定,你可以选择指位于它的文档在这里

Kohana和MVC模式

本节和以下相关内容(控制器,操作,模型,视图)构成Kohana应用程序开发基础的第一个主要部分 - 创建处理请求的过程(函数)。 后面的部分涵盖其他关键领域(例如定义路由,处理错误等)。 建议您在您的Droplet上尽可能多地尝试这些示例,以便在开始构建生产就绪应用程序之前感到舒适。

正如我们已经详细讨论的,Kohana使用(H)MVC模式来处理请求。 使用Kohana开发的应用程序更好地遵循这种风格,尽可能彻底地创建流畅的操作程序。

控制器 - “C”的MVC模式

控制器是纯文本文件,构成处理传入请求的主要部分之一。 它粘合形成MVC模式的其余部分,并使它们共同创建和返回响应。 每个传入的请求在被路由之后被传递到匹配的控制器并且通过调用动作(例如print_names)来处理。

约定

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

  • 根据存在的classes/Controller/*

  • 有它的名称相匹配的文件名(即Controller_Name内部classes/Controller/Name.php )。

  • 遵循其余的命名和样式约定。

  • 扩展父Controller类。

例子:

# 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 {

它是如何工作的?

控制器的工作方式与以下类似:

  • 请求 -控制器收到包装成一个对象请求数据,贴在[对象]变量$this->request

  • 使用模型 -控制器将信息传递给模型来修改数据库和数据对象,他们的请求/接收模式来处理数据(可能通过的意见)的数据。

  • 随着视图 -控制器,处理与模型请求和数据接收的信息后,由视图层将此信息传递回其呈现(即视图)沿最终响应。

  • 响应 -控制器返回包装成一个对象[变量]定义为一个最终响应$this->response (如最终视图体可以通过设置$this->response->body($my_resp)

操作

动作是在类下定义的[公共]过程(即函数)。 它们包括要处理的请求的可调用项。

约定

通过Kohana系统的惯例, 行动必须具备:

  • action_前缀追加到他们的名字。 (即action_print_names )。

  • 公共分类(即public function action_print_names()

  • $this->response->body($view)设置在它们的执行周期结束时,返回一个视图给用户。

注意:有两个主要的例外措施。 这些是:

  • 前( public function before() -用于拥有一切的代码之前执行。

  • 后( public function after() -用于拥有一切执行代码。

模型 - “M”的MVC模式

Kohana中的模型是包含类或其他数据形成/包含表示数据库(或任何数据源)正上方的层的对象的纯文本文件。 这类对象的独特性(即那些用于表示实际数据)通过允许直接关系到创建,修改,更新或删除数据的所有程序分离使模型 MVC模式的完美作品。

约定

按照惯例,在模型下定义的类 - 类似于控制器 - 必须:

  • 根据存在的classes/Models/*

  • 有它的名称相匹配的文件名(即Model_Name内部classes/Model/Name.php )。

  • 遵循其余的命名和样式约定。

  • 扩展父模型类。

它是如何工作的?

通常模型使用对象关系映射器(ORM)解决方案来公开数据和与控制器类交互的方式。 Kohana有自己的ORM模块,允许设计和创建非常好的结构化对象。

在接收到命令(可能具有其他变量)时,模型执行期望的动作以发回对数据请求的响应,或者用给定的数据更新数据库。

视图 - “V”的MVC模式

查看文件形成与最终响应的表示相关的所有内容。 当然,这些文件不直接包含第三方资源(例如图像或其他运行时依赖); 然而,它们形成了要提供给最终用户的基础。 如果您正在设计基于Web的API,则可以使用视图以易于维护的结构化方式返回所需的数据。 (例如对ajax请求的json响应)。

当使用视图时,最好远离所有逻辑操作,否则将修改视图文件中要表示的数据。 应该使用视图(尽可能多地)来形成数据的显示方式。

约定

  • 查看文件必须在存在views/目录(例如views/login.php

  • 他们应该尽可能“哑”。

  • 它们应该被用于除使用设置,以形成表示所述数据的任何其他。

它是如何工作的?

为了形成最终视图,控制器将特定有效负载(数据)传递到视图文件,视图文件处理它们的方式(例如,在列表上迭代以形成表的列)。 在编译所有内容(处理了有效载荷/数据的模板文件)之后,视图的表示将由控制器作为对请求的最终响应传输。

路由

正如我们在Kohana系列的第一篇文章中描述和讨论的,每个请求被解析(处理)和路由。 它的工作原理主要是通过如何在应用程序中定义路由。

这些元素形成是针对(为了它们被写入)请求匹配来决定的请求负载调用哪个动作 模式

约定

除非你是严格开发自己的模块,路由通常下定义bootstrap.php的文件-在最后。

这些路由机制定义是非常灵活和慷慨的,它们的功能 - 可能是最灵活的存在。 你可以使用它们非常简单地实现伟大的事情 - 只需遵循正确的模式。

  • 所有路由名称必须是唯一的。

  • 它们必须在缺省路由之前定义。

  • 不能包含特殊令牌参数( (), <>

例:

# 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)

注意:只要一个路由匹配,程序将停止。 因此,所有附加路由(即所有bar的默认路由)必须在默认路由之前创建。

它是如何工作的?

请求对象在与路由匹配时与其数据一起传送。 这个匹配和请求路由过程包括:

  • 将请求匹配到路由

  • 查找下相关的类classes/Controller目录。

  • 查找控制器。

  • 查找和呼叫控制器的动作调用。

  • 返回应答视图 )。

使用Kohana处理错误

与单元测试一起,处理错误(以相当的方式)是几乎任何应用中最关键的部分之一。 Kohana的,使用PHP的ErrorException,轮流到错误的异常,并允许他们处理与它的帮手。

注册HTTP错误页面控制器

健壮的Web应用程序将处理错误并将结果(即响应)正确地提供给其用户。 为此,Kohana提供了一个异常的错误处理系统(没有双关语 - 见上文)。

要注册HTTP错误页面以抛出异常:

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;
    }

}

抛出HTTP错误

Kohana有一个非常好的,易于操作的错误处理机制,用于抛出HTTP错误/异常。

例:

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

会话和Cookie

为了方便使用会话和cookie,Kohana提供帮助类,允许您安全地工作。

会话

当会话工作,你需要有一个变量访问会话实例

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

通过访问会话实例,您可以通过以下方式获取数组中的所有数据:

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

将新值附加到会话变量:

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

要获得一个值:

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

最后,删除:

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

饼干

Kohana仅处理安全的cookies。 对于这一点,一个字符串,设置为,并提到,作为Cookie::$salt必须在定义的bootstrap.php的文件,如下所示:

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

要设置Cookie值,您可以使用与处理会话时相同的方式:

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

获取Cookie的值:

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

最后,删除:

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

注意:要了解如何使用饼干Kohana的多,检查工作的官方文档 (最新版)。

:提交OS Tezer
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏