如何在我的某个模型类中使用我在cakePHP中创建的组件?这可能吗?
如果是,请告诉我如何才能这样做
答案 0 :(得分:26)
在MVC框架中可能但非常不良做法。如果您认为需要在模型中使用该组件,则应该重新考虑并重新组织代码,因为某些事情是明确的错误。
组件被认为在控制器之间共享代码,仅在控制器之间。
要在模型之间共享可重用的代码,这将是一种行为。对于一个观点,它将是一个帮手。
如果你有一些非常通用的代码,它应该是一个lib或将它放在Utility文件夹/命名空间中或创建一个新的命名空间。检查那里的现有课程,以了解放在那里的内容。
未提供任何代码,因此无法就如何重构代码提供任何真正的建议。但是,您希望使用现有代码的方式不能在MVC上下文中工作,所以有时间重新思考您尝试做的任何事情的方法。
答案 1 :(得分:10)
可以在模型中使用组件(但如果这是推荐的或最佳实践,我无法发表评论)。
从original source启发,在模型中使用名为“Geocoder”的组件的示例:
App::import('Component','GeoCoder');
$gc = new GeoCoderComponent(new ComponentCollection);
然后您可以使用$gc
来调用组件的功能。
-
P.S。:我不想鼓励糟糕的编程实践,但有时候最后期限的压力(在现实世界的项目中)可能会迫使开发人员做出这样的决定。
答案 2 :(得分:-1)
@ AD7six
// Use anywhere
AuthComponent::user('id')
// From inside a controller
$this->Auth->user('id');
从他们提供的蛋糕PHP文档AuthComponent::user('id')
,以便它可以在控制器以外的地方使用。
也许我需要更大的提示,但为什么我的模型不能访问ACL信息?