如何在Kohana 3项目中安排业务逻辑

时间:2010-03-14 21:48:35

标签: php kohana kohana-3

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

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

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

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

假设我已经制定了所有API并已到位 - 列出所有业务,编辑业务,按街道名称列出业务,创建以业务身份登录的商品,等等,我只是在寻找如何适应将功能转换为MVC模式和Kohana应用程序结构,可以轻松扩展。

  • 您是否知道“数据库密集型”应用程序(如目录,在线社区......)的实际示例,其中包含基于Kohana 3的登录区域,最好是开源,因此我可以看一看他们是如何看待的做到了吗?

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

  • 您是否了解使用Kohana构建复杂应用程序的任何有用资源?

  • 您是否构建了类似的内容,并可以就项目结构向我提供建议?

  

恩惠

     

我正在向@antpaw颁发赏金,因为他向我提供了一个Kohana应用程序,其中包含一些业务逻辑,这些逻辑给了我很多例子。干杯@Pixel Developer也为您提供了出色的投入 - 我经常希望有人可以分享赏金!

2 个答案:

答案 0 :(得分: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 Fressyinet写了一篇文章,详细介绍了iBuilding Tech Blog上的内容。 Scaling Web Applications with HMVC

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

$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/

如您所见,控制器名称中的下划线充当目录分隔符。这适用于模型和香草类。

答案 1 :(得分:7)

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

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

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

将视图结构化为子文件夹以避免混乱的视图目录也很重要。