你能从CakePHP的视图中调用控制器功能吗?

时间:2009-07-08 08:47:43

标签: cakephp

我想从视图中调用控制器函数。 Cake PHP中有可能吗?

4 个答案:

答案 0 :(得分:7)

可以通过requestAction method进行,但不建议使用,因为会有轻微的性能影响。明智地使用它。

作为评论中提到的Xr,使用requestAction通常表示设计问题(MVC分离)。

答案 1 :(得分:2)

Yeap使用requestMethod和Caching

$out = Cache::read('savedincache');
if(empty($out)){
   $out = $this->requestAction('/articles/myfunction');
   Cache::write('savedincache', $out);
}

在/app/controllers/articles_controller.php

function myfunction(){
   $out = $this->Article->find('all');
   return $out
}

答案 2 :(得分:1)

我已成功完成以下操作(CakePHP 2.3)。

假设您的“MyController”具有名为“functionToRun()”的公共函数。

从您的查看文件:

$variable = new MyController();
$variable->functionToRun($parameter);

请注意,“$ this-> request”对象将不可用,因此如果您需要该函数中的数据,则必须将其作为参数传递,并且可能会将该函数更改为允许这样做。

我不打算争论这是否是一个好主意,虽然应该注意的是,有时建筑物着火了,你必须在昨天把它拿出来。我承认可能整体设计应该更好,但我们没有时间重建一层到三层,因为我们在第五层时发现了这个问题。

考虑到破坏规则的选择,我更倾向于打破这个规则,而不是关于代码重复的规则,对我来说,有限的知识是唯一剩下的选择。代码重复会导致更糟糕的维护噩梦。

答案 3 :(得分:0)

requestAction方法是个坏主意,如果你需要从控制器设置变量我认为最好将控制器代码移动到模型然后在app_controller.php中,从beforeFilter函数移动你可以使用您的模型,然后从您的模型中调用您的函数