2012-04-17 10 views
3

コントローラでajaxデータを操作するためにコントローラで使用したい再利用可能な機能があります。なぜならコントローラはAJAXであるためにビューを持たないからです。私は以下のメソッドが正当にZend Frameworkにどこに属しているのかを知りたいです。このメソッドはどこで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

答えて

4

あなたの関数はhtmlをフォーマットしているので、私の意見ではビューヘルパーに属しています。私はあなたが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

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

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

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

+0

あなたの最初のアプローチは私にとって過酷だと思われますが、彼の行動コントローラのほとんどはAJAXリクエストを処理しないと推測します。たとえそうであっても、アクションヘルパーを使用する方が賢明でしょう。 ** + 1 **あなたの2番目のアプローチは、私にとっては最高のものです。 – Liyali

関連する問題