在模型中使用 cakephp 组件

Posted

技术标签:

【中文标题】在模型中使用 cakephp 组件【英文标题】:use cakephp component inside a model 【发布时间】:2012-04-04 09:58:23 【问题描述】:

如何在我的一个模型类中使用我在 cakephp 中创建的组件?这可能吗?

如果是这样,请告诉我该怎么做

【问题讨论】:

【参考方案1】:

在MVC 框架中是可能的,但非常不好的做法。如果您认为需要在模型中使用该组件,您应该重新考虑并重新组织您的代码,因为那是明显的错误

组件被认为在控制器之间共享代码,在控制器之间。

CakePHP 1.3 中的组件 CakePHP 2.x 中的组件 CakePHP 3.x 中的组件

在模型之间共享可重用代码将是一种行为。对于视图,它将是一个帮手。

如果你有一些真正通用的代码,它应该是一个 lib,或者将它放在 Utility 文件夹/命名空间中,或者创建一个新的命名空间。检查那里的现有类以了解在其中放置什么。

没有提供任何代码,因此无法就如何重构它给出任何真正的建议。但是,您希望使用现有代码的方式在 MVC 上下文中不起作用,因此是时候重新考虑您尝试做的任何事情的方法。

【讨论】:

而且用在不同的地方,最好组织成lib【参考方案2】:

可以在模型中使用组件(但我无法评论这是推荐还是最佳实践)。

灵感来自original source,一个在模型中使用名为“Geocoder”的组件的示例:

App::import('Component','GeoCoder');
$gc = new GeoCoderComponent(new ComponentCollection);

那么就可以使用$gc来调用组件的功能了。

--

P.S.:我不想鼓励不良的编程实践,但有时截止日期的压力(在现实世界的项目中)可能会迫使开发人员做出这样的决定。

【讨论】:

有些时候我们的老人也会给我们压力,因为他们不知道什么是 mvc arch(我认为)。 “截止日期”是不编写正确代码的非常糟糕的借口。没有什么需要“工作”的,只要把它放在正确的地方。不正确地玩Jenga:移动代码并堆积废话,直到它崩溃。将代码移动到正确的位置只需几分钟,但整个“架构”已经完全搞砸了。您最终会遇到无法维护的混乱局面,在某些时候维护和调试成本会变得非常昂贵。 你误会了我的意图。我曾经在大学读过Code Complete 2,这样我才能更专业地写出更好的代码。我在自己的时间阅读 PSR 标准,以便在我的日常工作中实施它们。我希望我能明确我的出身——我是一个“强迫症完美主义程序员”,我不会有意在我的代码上偷工减料。我每天都学到新东西,六个月后我做的同样的任务会更有效率,我接受。 根据您对截止日期的想法,请参考铁三角。 生产任何好东西都需要时间。我希望这不是真的,但有时必须采用低效的技术——不能吃你的蛋糕也不能吃!您应该了解离岸国家的办事处是如何运作的,以感受恐惧和恐慌驱动的发展,在这种发展中,没有经验的人完成更复杂的任务的时间更少。 @YisraelDov 这应该被视为您的模型中不需要这些类的暗示,应该寻找不同的解决方案。【参考方案3】:

@AD7six

// Use anywhere
AuthComponent::user('id')

// From inside a controller
$this->Auth->user('id');

从他们提供的蛋糕 PHP 文档中,AuthComponent::user('id') 可以在控制器以外的地方使用。

也许我需要一个更大的提示,但为什么我的模型不能访问 ACL 信息?

【讨论】:

以上是关于在模型中使用 cakephp 组件的主要内容,如果未能解决你的问题,请参考以下文章

具有两个模型会话的 Cakephp 身份验证组件

在 CakePHP 中使用控制器之外的组件

cakephp : 使用 $validate 数组验证登录表单

使用 CakePHP 'Acl' 组件

Cakephp 在组件中使用缓存

如何在 CakePhp 组件中调用回调?