2010-03-29 107 views
0

我有一個視圖幫助程序,它管理爲圖像生成縮略圖。圖像使用唯一的ID存儲,然後鏈接到數據庫中的文件資源。CakePHP:從視圖幫助程序訪問控制器或模型

我想知道生成這些圖像的視圖助手是否可以直接訪問模型或控制器,因爲無法在控制器工作流程中的任何其他位置加載圖像數據。

我知道這確實有些破綻,但它比試圖在視圖上重建整個數據管理堆棧更容易。

回答

1

如果您已經在模型或控制器中設置了數據,您可以訪問它。所以你必須在控制器中提前思考。正如你所說的,你不能將它加載到控制器中,也許你需要編寫一個特定的控制器函數,你可以使用$ this-> requestAction()從視圖中調用並傳入圖像名稱或類似的參數。

這樣做的唯一缺點是使用requestAction()時會皺眉,因爲它會啓動一個全新的調度循環,這會使您的應用程序變慢一點。

另一種可能的選擇是創建一個動態元素並將參數傳遞給元素並讓它爲您創建圖像。雖然我不太確定這將如何在實踐中發揮作用。

如果您沒有從控制器或模型傳入數據,您如何在視圖中使用助手生成縮略圖?我的意思是,如果是我,我會在控制器中設置'數據庫資源',並將其傳遞給視圖,然後讓幫助者在視圖中處理它。這樣你可以完全繞過這個問題:)

1

$this->params['controller']將返回你想要的。

按照...你可以把這個代碼在view.ctp文件,然後打開URL來渲染調試信息:中

$cn = get_class($this); 
$cm = get_class_methods($cn); 
print_r($cm); 
die(); 
0

您可以檢查代碼(line ☛366line ☛379)該表單助手,嘗試用:

echo $this->request->params['controller']; 
echo Inflector::underscore($this->viewPath); 
1

你可以寫一個幫手,並建立一個靜態函數setController(),並通過傳遞引用作爲參數,然後存儲它在一個靜態變量在助手類:

class FancyHelper extends FormHelper { 

static $controller; 

    public static function setController($controller) { 
    self::$controller = $controller; 
    } 

... more stuff 
} 

然後在你的控制器類,你可以導入FancyHelper類,並在beforeFilter函數的靜態分配:

App::uses('FancyHelper', 'View/Helper'); 

class FancyController extends AppController { 
public $helpers = array('Fancy'); 


    function beforeFilter() { 
    FancyHelper::setController($this); 
    } 

... more stuff 

} 

然後你可以從其他的公共功能採用自主訪問內部FancyHelper控制器: :$控制器。

相關問題