9

我正在寻找有关如何使用 Kohana 3 设置中型 Web 应用程序的建议、教程和链接。我过去曾实现过 MVC 模式,但从未针对“形式化”的 MVC 框架工作,所以我仍然得到我的围绕术语 - 玩弄基本示例、构建视图和模板等。

我的进展相当不错,但我想建立一个真实世界的网络项目(我自己的一个,我已经计划了很长时间了)作为学习对象。

我通过示例学习得最好,但现在基于示例的文档对于 Kohana 3 来说有点稀疏——他们自己在网站上这么说。虽然我并不担心在学习过程中学习框架,但我想确保代码库从一开始就结构健康 - 即控制器被很好地分割,命名良好并符合标准,最重要的是业务逻辑是分成适当大小的模型。

我的应用程序的核心可以描述为具有一系列搜索和列表功能的业务目录,以及每个条目所有者的登录区域。实际的管理数据库后端已经得到处理。

假设我已经制定了所有 API 并已就位 - 列出所有商家、编辑商家、按街道名称列出商家、创建作为商家登录的优惠等等,我只是在寻找如何将功能融入其中一个 MVC 模式和一个可以轻松扩展的 Kohana 应用程序结构。

  • 您是否知道“大量数据库”应用程序的真实示例,例如目录、在线社区……在 Kohana 3 上构建了一个登录区域,最好是开源的,这样我就可以看看他们是如何做到的?

  • 关于如何在 Kohana 项目中为最终用户构建可扩展的登录区域,是否有约定或最佳实践,它不仅能够处理业务目录页面,还能够处理单独页面上的更多产品?

  • 您知道有关使用 Kohana 构建复杂应用程序的任何好的资源吗?

  • 您是否构建了类似的东西并且可以就项目结构给我建议?

赏金

我将赏金授予@antpaw,因为他为我提供了一个带有一些业务逻辑的 Kohana 应用程序,这给了我很多示例。@Pixel Developer 也为您提供出色的输入而欢呼 - 就像经常一样,我希望有人能分享赏金!

4

2 回答 2

12

这里有很多问题要回答,我会尽力而为。

您是否知道“大量数据库”应用程序的真实示例,例如目录、在线社区……在 Kohana 3 上构建了一个登录区域,我可以在其中查看它们是如何做到的?

那里有一些示例应用程序。Woody Gilk(Kohana 创始人)已将代码发布到他在github上的个人网站上。对于登录区域,他分配了一个 cookie 值。Kohana 3 / 2.4 对 cookie 进行签名,使其安全并消除对会话的要求。这可能不符合每个人的口味,因此您始终可以使用同时使用会话和 cookie 的内置身份验证库。

以下是您可能感兴趣的其他一些项目:

  • Shindig - kohana 3 的轻量级博客模块
  • Kohanut - 用 Kohana 3 编写的可扩展 CMS

关于如何在 Kohana 项目中为最终用户构建可扩展的登录区域,是否有约定或最佳实践,它不仅能够处理业务目录页面,还能够处理单独页面上的更多产品?

如果我理解正确,您想为每个页面生成一个登录框吗?这在 Kohana 3 中很容易,因为我们可以利用HMVC中的H。Sam de Fressynet 在 iBuilding 技术博客上写了一篇文章,详细介绍了这一切。使用 HMVC 扩展 Web 应用程序

然后您可以做的是向登录控制器或操作执行内部请求,并将响应转储到您的视图页面中。

$login = Request::factory('login')->execute()->response;

$login 现在包含登录表单,您可以将其放在任何您喜欢的地方。如果请求是内部的,您可能希望返回不同的响应,这就是这段代码有用的原因:

if (Request::instance() !== $this->request)
{
    print 'Internal called made with Request::factory';
}

您知道有关使用 Kohana 构建复杂应用程序的任何好的资源吗?

不会有文档向您展示如何构建复杂的应用程序。Kohana 社区的观点是,您是一名 PHP 开发人员,应该能够自己解决这些问题。如果你不能,那么你不应该使用 Kohana。

您是否构建了类似的东西并且可以就项目结构给我建议?

一旦你了解了 Kohana 3 如何查找文件,事情就很容易理解了。

|- classes
|-- controller
|-- model
|- views

例如:

Controller_Mathew extends Controller 

将查找调用的文件mathew.php

classes/controller

下划线可用于指定更深的目录。例子:

Controller_Mathew_Davies extends Controller

将查找调用的文件davies.php

classes/controller/mathew/

如您所见,控制器名称中的下划线充当目录分隔符。这对于模型和香草类来说是正确的。

于 2010-03-18T14:26:22.757 回答
7

我会使用 kohana 附带的身份验证模块进行登录。这将为您提供角色表,您可以在其中设置可能的权限选项并将它们与用户相关联。之后,您可以在每个控制器的 __constructor() 或 action_function() 内部检查用户是否具有所需的角色,例如使用 ->has() 函数。您还应该使用 ORM 模块,它非常棒,因为您在表之间有很多关系。ORM 对象中的 __get() 方法也非常方便。

通过将新参数设置为 NULL 并在 if 语句中检查它也很容易扩展控制器功能。例如,您只需要一个功能来编辑旧条目或添加新条目。

public funciton action_manage($id = NULL)
{
    $entry = ORM::factory('entry', $id); // if id is null a new entry will be returned 
}

将视图组织成子文件夹以避免混乱的视图目录也很重要。

于 2010-03-14T22:28:57.077 回答