2012-12-10 143 views
0

我在理解組件,實用程序和行爲之間的差異時遇到了問題。 我看了食譜,但它只幫助了我一部分。組織CakePHP代碼

例如 - 我想在上傳時調整大小/裁切圖像。 我將使用與不同模型和控制器/操作相關的多種不同形式。

很顯然,我需要寫一個類規模調整saveImage和其他有用的方法。 我也需要能夠在不同的地方使用這種方法。

我的問題是 - 哪裏是正確的地方放這段代碼?有人能提供一些關於組件,效用和行爲之間核心差異的簡單例子嗎?因爲對我來說組件和實用程序看起來非常相似

回答

2
  • 行爲是適用於模型邏輯的包。
  • 組件是邏輯包,適用於控制器
  • 實用程序是通用庫,不一定適用於MVC的任何特定部分。

實用程序和行爲/組件之間的主要區別是:實用工具類不會延長核心MVC類,因而不會自動接收鉤到他們的父類的請求週期。例如,在組件中,您可以實現一個beforeRender()函數,該函數在控制器每次調用控制器時自動地呈現其佈局/視圖之前會被調用。

此外,實用程序類必須實例化並在使用前分配給變量:$myUtil = new MyUtility(); $myUtil->blah() - 行爲/組件/幫助程序在加載到類中時可以實例化,並且可以用$this->MyComponent->blah()引用。

就你而言,圖像處理邏輯很可能屬於Component或Utility類,你可以選擇實現它。就個人而言,我會去寫一個Component,因爲你不太可能利用控制器之外的圖像處理邏輯。

編輯:您還可以考慮查找和使用已經有人寫了一個現有的組件,例如我發現ImageToolImage ResizerImage Upload & ResizerThumbnail在約2分鐘的谷歌搜索。

+0

我會看看這些組件。但首先我想了解它是如何工作的,並學習如何創建類似的功能。 :)你的回答非常有幫助,謝謝! – Derp

0

行爲的地方,你把那應該跨多個模型中重用代碼 組件都放在什麼地方的代碼,將跨越多個控制器 和助手,在那裏你把代碼中,將跨越多個視圖

使用這是基本的崩潰。

由於控制器負責應用程序邏輯,因此您最好將您的上傳器/縮放器構建到組件中。

如果需要修改數據如何被訪問,或從數據庫中返回,這將是一個行爲(因爲它影響的模型層)

如果你需要創建生成HTML或一些一些可重用的代碼類型的視圖輸出,這將是一個幫手。

用於上傳,縮放和調整圖像大小的示例。我會把它變成一個組件。例如,我有一個名爲UploadComponent.php的組件,用於上傳,保存並創建縮略圖圖像。

我做這個組件添加到我的控制器:

var components = array('Upload'); 

,然後我可以通過以下操作使用它在我的控制器:你如何實現你的組件

$this->Upload->createThumbnail(200, 200); 

細節顯然,取決於你。

希望有所幫助。

+0

是的,謝謝! – Derp