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

Pek*_*ica 9 php kohana kohana-3

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

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

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

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

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

  • 你知道"数据库密集型"应用程序的真实例子,如目录,在线社区......在Kohana 3上建立一个登录区域,最好是开源,所以我可以看一看他们是如何做到的?

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

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

  • 你有没有建立类似的东西,可以给我一个项目结构的建议?

赏金

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

The*_*per 12

这里有很多问题需要回答,我会尽我所能.

您是否知道"数据库密集型"应用程序(如目录,在线社区)的实际示例...在Kohana 3上构建了一个登录区域,我可以看一看他们是如何做到的?

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

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

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

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

如果我理解正确,你想为每个页面生成一个登录框?使用Kohana 3很容易,因为我们可以利用HMVC 中的H. Sam de Fressyinet撰写了一篇文章,详细介绍了iBuilding Tech Blog上的内容.使用HMVC扩展Web应用程序.

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

$login = Request::factory('login')->execute()->response;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

你有没有建立类似的东西,可以给我一个项目结构的建议?

一旦了解了Kohana 3如何找到文件,事情就很容易理解了.

|- classes
|-- controller
|-- model
|- views
Run Code Online (Sandbox Code Playgroud)

例如:

Controller_Mathew extends Controller 
Run Code Online (Sandbox Code Playgroud)

将查找一个名为的文件mathew.php:

classes/controller
Run Code Online (Sandbox Code Playgroud)

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

Controller_Mathew_Davies extends Controller
Run Code Online (Sandbox Code Playgroud)

将寻找一个名为的文件davies.php:

classes/controller/mathew/
Run Code Online (Sandbox Code Playgroud)

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


ant*_*paw 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 
}
Run Code Online (Sandbox Code Playgroud)

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