1

私は一般的にZendFrameworkとMVCにかなり慣れていないので、いくつかのアドバイスを探しています。基本コントローラークラスがあり、ユーザー情報やアカウント構成などを取得するためのメソッドがいくつかあります。

そのため、これらのメソッドのいくつかを使用して、さまざまなコントローラーアクションでコードを書き出しますが、このコードの重複を避けたいと思います。さらに、このコードをコントローラーの外に、ビューヘルパーに入れたいと思います。 JavaScriptを出力します。したがって、コントローラーのコードは次のようになります。

$obj= new SomeModel ( $this->_getModelConfig () );
$states = $obj->fetchByUser ( $this->user->getId() );
//Fair amount of logic here using this result to prepare some javascript that should be sent to the view...

$ this->_getModelConfigと$this->user-> getId()はコントローラーで実行できることですが、このコードを移動した後、その情報をビューヘルパーに渡すための最良の方法は何ですか?コントローラーの?

コントローラでこれらのメソッドを呼び出し、結果をビューに保存して、ヘルパーにそこから取得させる必要がありますか?

私が考えていたもう1つのオプションは、ヘルパーにいくつかのパラメーターを追加することでした。パラメーターが渡された場合、それらをヘルパーのプロパティに格納して返し、パラメーターを渡さずに呼び出されると、作業を実行します。したがって、次のようになります。

コントローラーから:

$this->view->myHelper($this->user->getId(), $this->_getModelConfig());

ビューから:

<?= $this->myHelper(); %>

ヘルパー:

class Zend_View_Helper_MyHelper extends Zend_View_Helper_Abstract
{
    public $userId = '';
    public $config = null;
    public function myHelper ($userId = null, $config = null)
    {
        if ($userId) {
            $this->userId = $userId;
            $this->config = $config;
        } else {
            //do the work
            $obj = new SomeModel($this->config);
            $states = $obj->fetchByUser($this->userId);
            //do the work here  
        }
        return $this;
    }
}

どんなアドバイスも歓迎します!

4

2 に答える 2

1

まず、ここの "$this->myHelper(); %>" での ASP スタイルの終了タグは悪い習慣であり、ロジックをモデル内に保持し、コントローラーをモデルの呼び出しに使用することをお勧めします。結果をビューに吐き出して表示します。

私がすることは、ビューに一連の値を渡したいだけの場合は、それらを連想配列に詰め込んで送信することです。

とにかく、あなたはあなたのことをすべきではありません...

「//この結果を使用して、ビューに送信する必要がある JavaScript を準備するためのかなりの量のロジックがここにあります...」

コントローラーの一部である場合、そのロジックを実行する新しいモデルを作成することをお勧めします。コントローラーでモデルを呼び出し、必要な引数を渡し、その結果をビューに吐き出します。

于 2010-08-03T15:27:44.930 に答える
0

最良の方法は、モデルからコントローラーを介してデータを取得し、ビューに渡すことです。ただし、ビューパーツをエコーするためのカスタムヘルパーが本当に必要な場合は、何をしようとしているのかを正確に言っているかどうかしかわかりません。

ヘルパーにこのロジックがすでにある場合は、ビューのパラメーターを渡すようにしてくださいmyhelper($ this-> params); ?>

このアプローチもご覧ください。

// In your view to put javascript in the header
// You can loop trought your data and then use it to generate the javascript.
<?php $this->headScript()->captureStart(); ?>
    $().ready(function(){
        $('#slideshow').cycle({ 
            fx:     'fade', 
            speed:  1000, 
            timeout: 6500, 
            pager:  '#nav'
        });
    });
<?php $this->headScript()->captureEnd() ?>  
于 2010-08-03T17:55:08.010 に答える