2009-07-08 54 views

回答

6

可以通过requestAction method进行设置,但不建议由于轻微的性能影响。明智地使用它。

由于Xr在注释中提到,使用requestAction通常表示设计问题(MVC分离)。

+0

不完全是海量的(至少不是):http://cakedc.com/developer/mark_story/2009/02/27/benchmarking-requestaction。 不过,如果你想调用一个控制器函数,你可能会遇到如何在MVC模型的各个部分之间分离功能的问题。 – 2009-07-08 13:24:03

1

叶氏使用requestMethod与高速缓存中/app/controllers/articles_controller.php

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

requestAction方法

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

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

1

我已经成功完成了以下操作(CakePHP 2.3)。假设你有一个名为“functionToRun()”的公共函数的“MyController”。

从视图文件:

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

注意“$这个 - >请求”对象将无法使用,所以如果你需要,在功能数据,你必须通过它的作为参数,并且可能对该功能进行更改以允许这样做。

我不会争论这是否是一个好主意,但应该指出的是,有时候大楼有点火了,而且你必须在昨天把它熄灭。我会承认,可能整体设计应该是更好的,但我们没有时间重建第一层到第三层,因为我们到达第五层时发现了这个问题。

鉴于规则的选择,我更喜欢打破这个规则,而不是关于代码重复的规则,这对我公认的有限知识是唯一剩下的选择。代码重复会导致更糟糕的维护恶梦。

相关问题