CakePHP - 从视图中调用组件的功能

问题描述:

如何从视图中的组件调用函数? (ctp文件)
这是一个很好的做法吗?CakePHP - 从视图中调用组件的功能

感谢,
三通

对于大多数组件,你可以使用类似:

App::import('Component', 'YourComponent'); 
$theComponent = new YourComponent(); 
$theComponent->yourMethod(); 

然而,组件意味着共享由控制器使用的功能,所以平时应当避免的看法调用组件。

我建议将组件方法包装在帮助器中,然后使用通常的路径访问帮助器。

+0

感谢@Jonathan,我也在我的代码使用后建议帮手。 – 2017-12-07 13:32:09

我认为这不是一个好习惯。将设计视为设计师应该使用的一种视图。如果可能的话,您希望将代码保存在模型和控制器中。如果它与可重用的视图内容有关,请考虑将控制器移动到元素或助手,因为这是他们的目标。

如果您提供了更多详细信息,我们可以更具体地说明如何实现某些功能,如果您已经拥有我们可以参考的代码库。

+0

我的意见是,这是一个判断的呼吁。代码是代码,逻辑是逻辑。它的一些属于控制器,一些属于模型,另一些属于视图。但**一些**代码需要在任何地方**访问**。以**余弦**为例。以**今天的日期**为例。有什么可能的原因可以限制这些功能只是MVC范例的一部分,因为我们已经发明了一个范例? – UncaAlby 2016-08-22 21:11:41

+0

它与MVC范例@UncaAlby和更多关于SOLID无关。为什么渲染系统需要知道做数学?渲染HTML没有理由知道数学。 – 2016-08-24 17:56:25

一切都是可能的!

组件:

function initialize(&$controller){ 
     $this->controller =& $controller; 
     $this->controller->set('YourComponent', new YourComponent()); 
    } 

查看:

<?php $YourComponent->doAction() ... ?> 
+0

这是好方法,我声明public $ components = array(“compo1”);然后我设置组件:$ this-> set(“compo1”,$ this-> compo1);有效! – Phuong 2016-12-21 04:50:34