我想從視圖中調用一個控制器函數。 在CakePHP中可能嗎?你可以在CakePHP的視圖中調用控制器函數嗎?
4
A
回答
6
可以通過requestAction method進行設置,但不建議由於輕微的性能影響。明智地使用它。
由於Xr在註釋中提到,使用requestAction通常表示設計問題(MVC分離)。
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);
注意「$這個 - >請求」對象將無法使用,所以如果你需要,在功能數據,你必須通過它的作爲參數,並且可能對該功能進行更改以允許這樣做。
我不會爭論這是否是一個好主意,但應該指出的是,有時候大樓有點火了,而且你必須在昨天把它熄滅。我會承認,可能整體設計應該是更好的,但我們沒有時間重建第一層到第三層,因爲我們到達第五層時發現了這個問題。
鑑於規則的選擇,我更喜歡打破這個規則,而不是關於代碼重複的規則,這對我公認的有限知識是唯一剩下的選擇。代碼重複會導致更糟糕的維護惡夢。
相關問題
- 1. 你可以從CakePHP中的控制器beforeFilter()函數調用Html-> scriptBlock()嗎?
- 2. 從視圖中可以調用控制器中的方法嗎?
- 3. 你可以使用UIPageViewController瀏覽多個視圖控制器嗎?
- 4. 容器視圖視圖控制器中的UIViewController調用函數
- 5. 你可以從其他視圖控制器調用其他segues嗎?
- 6. 如何在cakephp 3的不同視圖中從控制器調用函數?
- 7. 我可以從視圖調用控制器和模型嗎?
- 8. 你可以設置容器控制器的滾動視圖插圖嗎?
- 9. 單頁視圖控制器可以使用頁面視圖控制器嗎?
- 10. CakePHP:我可以在沒有關聯視圖的控制器中創建一個函數嗎?
- 11. cakephp在一個視圖中調用不同的控制器?
- 12. 你可以使用爲故事板的xib創建的視圖控制器嗎?
- 13. cakePHP - 可以在執行任何控制器動作後調用的函數
- 14. 在視圖控制器中調用的最後一個函數
- 15. 在html視圖中調用onchange事件的控制器函數
- 16. 在swift中從不同的視圖控制器調用函數
- 17. Cakephp Auth可以在其他控制器中使用嗎?
- 18. cakephp你如何在模型中調用控制器的動作
- 19. 當你調用成員函數時,你可以調用friend函數嗎?
- 20. Codeigniter:在控制器視圖中調用函數
- 21. 在另一個視圖控制器中調用函數
- 22. 從視圖中調用控制器的方法CakePHP
- 23. 從他的超級調用視圖控制器中的函數
- 24. 在MVC中,控制器可以直接與視圖對話嗎?
- 25. 在其他視圖控制器的第一個視圖中調用函數
- 26. 我可以在控制器中調用多個Java腳本函數嗎?
- 27. 如何在cakePHP控制器中調用javascript函數?
- 28. 如何從codeigniter視圖調用laravel控制器中的函數?
- 29. 如何調用表視圖控制器中的函數?
- 30. didReceiveRemoteNotification - 當前視圖控制器中的調用函數
不完全是海量的(至少不是):http://cakedc.com/developer/mark_story/2009/02/27/benchmarking-requestaction。 不過,如果你想調用一個控制器函數,你可能會遇到如何在MVC模型的各個部分之間分離功能的問題。 – 2009-07-08 13:24:03