1


0

私のzendビューヘルパーの書き方を理解するのに助けが必要

私は一般的にZend Frameworkと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()はコントローラーでできることです。このコードを移動したら、ビューヘルパーにその情報を渡す最良の方法は私の質問ですコントローラーの?

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

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

コントローラーから:

$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;
    }
}

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

2 Answer


1


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

私がすることは、単にビューに値の束を渡したい場合、連想配列に詰めて送信します。

とにかくあなたはあなたのことをしてはいけません…​

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

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


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.
headScript()->captureStart(); ?>
    $().ready(function(){
        $('#slideshow').cycle({
            fx:     'fade',
            speed:  1000,
            timeout: 6500,
            pager:  '#nav'
        });
    });
headScript()->captureEnd() ?>