3

我有一些可重用的函数,我想在控制器中使用它们来操作控制器中的 ajax 数据。因为控制器没有视图(因为它是 AJAX)。我想知道下面的方法在 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;
}

我需要在各种控制器和操作中重用此方法。

它属于哪个辅助方法?

4

2 回答 2

4

Since your function is formatting html, it belongs to a View Helper in my opinion. I assume you're using AjaxContext with a json format (this would be the reason why you don't need a viewscript for this action). However, you can call any view helper from your controller anyway using:

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

And your view helper would look like this:

// .../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;
    }
}
于 2012-04-17T15:45:57.203 回答
2

(至少)有两种方法可以解决这个问题。

首先是创建一个自定义控制器并从中扩展所有其他控制器。这样所有控制器/操作都可以访问此功能。

第二个是创建一个动作视图助手。这将允许在您有权访问视图对象的任何地方调用函数(或类,在这种情况下)。

于 2012-04-17T16:00:22.827 回答