3

コントローラーでajaxデータを操作するためにコントローラーで使用したい再利用可能な関数がいくつかあります。コントローラにはビューがないため(AJAXであるため)。以下のメソッドがZendFrameworkのどこに正しく属しているのか知りたい

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

あなたの関数はhtmlをフォーマットしているので、私の意見ではViewHelperに属しています。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;
    }
}
于 2012-04-17T15:45:57.203 に答える
2

この問題には(少なくとも)2つのアプローチがあります。

1つ目は、カスタムコントローラーを作成し、そこから他のすべてのコントローラーを拡張することです。そうすれば、すべてのコントローラー/アクションがこの機能にアクセスできます。

2つ目は、アクションビューヘルパーを作成することです。これにより、ビューオブジェクトにアクセスできる場所であればどこでも、関数(この場合はクラス)を呼び出すことができます。

于 2012-04-17T16:00:22.827 に答える