【发布时间】:2012-04-04 09:58:23
【问题描述】:
如何在我的一个模型类中使用我在 cakePHP 中创建的组件?这可能吗?
如果是这样,请告诉我该怎么做
【问题讨论】:
标签: php cakephp cakephp-1.3
如何在我的一个模型类中使用我在 cakePHP 中创建的组件?这可能吗?
如果是这样,请告诉我该怎么做
【问题讨论】:
标签: php cakephp cakephp-1.3
在MVC 框架中是可能的,但非常不好的做法。如果您认为需要在模型中使用该组件,您应该重新考虑并重新组织您的代码,因为那是明显的错误。
组件被认为在控制器之间共享代码,仅在控制器之间。
在模型之间共享可重用代码将是一种行为。对于视图,它将是一个帮手。
如果你有一些真正通用的代码,它应该是一个 lib,或者将它放在 Utility 文件夹/命名空间中,或者创建一个新的命名空间。检查那里的现有类以了解在其中放置什么。
没有提供任何代码,因此无法就如何重构它给出任何真正的建议。但是,您希望使用现有代码的方式在 MVC 上下文中不起作用,因此是时候重新考虑您尝试做的任何事情的方法。
【讨论】:
可以在模型中使用组件(但我无法评论这是推荐还是最佳实践)。
灵感来自original source,一个在模型中使用名为“Geocoder”的组件的示例:
App::import('Component','GeoCoder');
$gc = new GeoCoderComponent(new ComponentCollection);
那么就可以使用$gc来调用组件的功能了。
--
P.S.:我不想鼓励不良的编程实践,但有时截止日期的压力(在现实世界的项目中)可能会迫使开发人员做出这样的决定。
【讨论】:
@AD7six
// Use anywhere
AuthComponent::user('id')
// From inside a controller
$this->Auth->user('id');
从他们提供的蛋糕 PHP 文档中,AuthComponent::user('id') 可以在控制器以外的地方使用。
也许我需要一个更大的提示,但为什么我的模型不能访问 ACL 信息?
【讨论】: