我正在寻找有关如何使用 Kohana 3 设置中型 Web 应用程序的建议、教程和链接。我过去曾实现过 MVC 模式,但从未使用过“形式化”MVC 框架,因此我仍在了解术语 - 尝试基本示例、构建视图和模板等。

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

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

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

假设我已经完成所有 API 并就位 - 列出所有企业、编辑企业、按街道名称列出企业、创建以企业身份登录的报价等等,我只是在寻找如何将功能融入其中MVC 模式并转换为可轻松扩展的 Kohana 应用程序结构。

  • 您知道“数据库密集型”应用程序的现实示例吗,例如目录、在线社区......带有一个基于 Kohana 3 构建的登录区域,最好是开源的,这样我就可以看看他们是如何做到的?

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

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

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

赏金

我向 @antpaw 提供赏金,因为他为我提供了一个 Kohana 应用程序,其中包含一些业务逻辑,为我提供了很多示例。也为@Pixel Developer 的出色贡献干杯——就像往常一样,我希望有人能分享一份赏金!

有帮助吗?

解决方案

我会使用 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 
}

将视图构建到子文件夹中以避免混乱的视图目录也很重要。

其他提示

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

您知道“数据库密集型”应用程序的现实示例吗,例如目录、在线社区......在 Kohana 3 上建立了一个登录区域,我可以在那里看看他们是如何做到的?

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

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

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

如果我理解正确的话,您想为每个页面生成一个登录框吗?这对于 Kohana 3 来说很容易,因为我们可以利用 H 在 HMVC 中。Sam de Fressyinet 在 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/

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top