2012-04-17 51 views
3

我有一些可重複使用的功能,我想用我的控制器來操縱控制器中的ajax數據。因爲控制器沒有視圖(因爲它是AJAX)。我想知道哪裏下面的方法理所當然地在Zend框架這個方法在zend框架中屬於哪裏?

function blockUnblock($value, $id) { 
    $image = ($value == 0) ? 'tick.png' : 'tock.png'; 
    $alt = ($value == 0) ? 'Yes' : 'No'; 
    $src = '<a class="toggle" href="#toggle">'; 
    $src .= '<img src = "/css/images/'.$image.'" alt = "'.$alt.'" data-id = "'.$id.'" data-block = "'.$value.'"/>'; 
    $src .= '</a>'; 
    return $src; 
} 

我需要重複使用跨各種控制器和操作這種方法屬於。

它屬於哪個幫手方法?

+0

老實說它屬於你想要的地方。它會成爲一個很好的視圖助手,或者你可以把它放在一個相關的函數類(或它自己的類)中,並把它放在你自己的名字空間下的庫中。如果你想要的話,你可以把它作爲一個函數添加到你的控制器中(我在開發過程中做了很多工作來測試代碼,當它是正確的時候我把它放在了我想要的地方)。這是你的代碼,做你覺得正確的事情。 – RockyFord 2012-04-18 03:07:29

回答

4

由於你的函數格式化html,所以在我看來它屬於View Helper。我假設你正在使用json格式的AjaxContext(這就是你不需要這個動作的視圖的原因)。但是,您可以從反正你控制器調用任何視圖助手使用:

$imageLink = $this->view->blockUnblock($value, $id); 
$this->view->imageLink = $imageLink; 

和你的視圖助手應該是這樣的:

// .../views/helpers/BlockUnblock.php 
class Zend_View_Helper_BlockUnblock extends Zend_View_Helper_Abstract 
{ 

    public function blockUnblock($value, $id) 
    { 
     $image = ($value == 0) ? 'tick.png' : 'tock.png'; 
     $alt = ($value == 0) ? 'Yes' : 'No'; 
     $src = '<a class="toggle" href="#toggle">'; 
     $src .= '<img src = "/css/images/'.$image.'" alt = "'.$alt.'" data-id = "'.$id.'" data-block = "'.$value.'"/>'; 
     $src .= '</a>'; 
     return $src; 
    } 
} 
2

有(至少)兩種方法解決這個問題。

第一個是創建一個自定義控制器並從中擴展所有其他控制器。這樣所有的控制器/操作都可以訪問這個功能。

第二個是創建一個動作視圖助手。這將允許函數(或類,在這種情況下)被調用,只要你有權訪問視圖對象。

+0

你的第一種方法似乎對我來說太過分了,我認爲他的大部分動作控制器都不處理AJAX請求,即使如此,使用動作助手也會更聰明。 ** + 1 **雖然是第二種方法,這對我來說是最好的。 – Liyali 2012-04-17 18:08:24