2009-07-08 61 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); 

注意「$這個 - >請求」對象將無法使用,所以如果你需要,在功能數據,你必須通過它的作爲參數,並且可能對該功能進行更改以允許這樣做。

我不會爭論這是否是一個好主意,但應該指出的是,有時候大樓有點火了,而且你必須在昨天把它熄滅。我會承認,可能整體設計應該是更好的,但我們沒有時間重建第一層到第三層,因爲我們到達第五層時發現了這個問題。

鑑於規則的選擇,我更喜歡打破這個規則,而不是關於代碼重複的規則,這對我公認的有限知識是唯一剩下的選擇。代碼重複會導致更糟糕的維護惡夢。

相關問題