2012-03-12 10 views
1

Zend Frameworkの使い方を勉強しようとしていて、iveが問題に遭遇しました。現在のユーザー名(すべてのページに表示されている)、特に/layouts/scripts/default.phtmlをアプリケーションのヘッダーに配置しようとしています。Zend Frameworkを使ったレイアウトでの変数の使用

MVCアーキテクチャは私には非常に新しく、私を大きく混乱させます。私は毎回コントローラーにこのユーザー名を表示するロジックを配置する必要はありません(これはおそらくそれを行うには間違った方法です)ので、各コントローラーにこの変数を割り当てない場合、どこにコードを配置しますか?

乾杯

答えて

2

これは、アクションヘルパーのために設計されたものです。それらの完全なチュートリアルは、SOの範囲を少し超えていますが、いくつかの良いチュートリアルがあります。

で始まり、次にMathew Weier O'Phinney's tutorialとこれをRob Allenで見てください。

このようなことのためにベースコントローラーを使用する際の問題は、コントローラーが必要とするかどうかにかかわらずリソースがロードされることです。アクションヘルパーは必要な場合にのみロードされます。

私はほとんどZendCasts have a video on action helpersを忘れてしまった。

+0

完璧な答え。私たちは、具体的な問題を解決するための簡単な例を常に考えていますが、必ずしも大きな問題を理解しようとはしません。アクションヘルパーのヒントは素晴らしいものです! –

+0

* "このようなことのためにベースコントローラーを使用する際の問題は、コントローラーが必要としているかどうかに関係なく、リソースがロードされているのに対し、アクションヘルパーは必要な場合にのみロードされるということです。まあそれは全く真実ではありません。適切なアーキテクチャでは、あなたはする必要はありません。アクションヘルパーの問題は、必要な場合に呼び出す必要があることです。どこにいても必要な場合は、どこにでも呼び出す必要があります。また、したくない場合はベースコントローラーが必要です。 – netcoder

+0

@netcoderベースコントローラーの使用は控えてください。私は彼らがより多くの機能を彼らに押し込んで、彼らが手を抜いているのを発見しました。自分の経験からしか話すことができませんが、ベースコントローラーよりもはるかに扱いやすいアクションヘルパーを見つけています。私はベースコントローラーが悪いと言っているのではなく、ちょうど私が好きではないと言っているわけではありません:) – vascowhite

1

あなたはベースコントローラをしたいとpreDispatch方法でいることを割り当てるには:あなたに続いて

class MyApp_Module_ActionController extends MyApp_Controller_Action { 

} 

class MyApp_Controller_Action extends Zend_Controller_Action { 
    public function preDispatch() { 
     parent::preDispatch(); 
     Zend_Layout::getMvcInstance()->assign('username', getCurrentUserName()); 
    } 
} 

その後、その新しいクラスを使用して独自のコントローラを拡張レイアウトビュー:

echo $this->layout()->username; 
0

まず、マニュアルを読んで、このような何かを達成しようとするよりも:

class BaseController extends Zend_Controller_Action { 

    public function preDispatch() { 
     // your logic to show the user name goes here 
    } 

} 

class SomePageController extends BaseController {} 

class SomeOtherPageController extends BaseController {} 

これが最も可能性の高いあなたの問題を解決します。

関連する問題