2012-04-11 7 views

答えて

2

ストレートhttp://www.phppatterns.com/docs/design/the_registry

からレジストリは、グローバルメルトダウンを防ぐために貢献し、よく管理方法でグローバルデータを格納するためのメカニズムを提供します。

基本的に、レジストリは、アプリケーションのグローバル名前空間を汚染することなく、必要な変数/オブジェクトをグローバルスコープに格納する場所です。それはMVCそれ自体とは関係ありませんが、多くのMVCフレームワークもレジストリパターンを利用しています。

は、これは、1つの場所で変数にあなたを可能にし、はあなたの変数を取得するために、複雑なルーチンや魔法のすべての種類に頼ることなく、別の場所でそれを取り出します。

あなたはZend_Navigationオブジェクトを作成し、ブートストラップでZend_Registryに保管たとえばZend Frameworkのを取ります。その後、あなたはコントローラや他のクラスのレジストリから簡単に検索できます。

+0

したがって、レジストリを静的に呼び出す必要がありますか?またはオブジェクトを介して? – Eli

+0

ほとんどのレジストリ実装は実際には静的です。 'なZend_Registry ::取得()'と 'なZend_Registry ::セット()'例えば。 – ChrisR

+0

はZendのは、それをしないという理由だけで静的レジストリを使用しないでください、Zendのは良い開発標準の柱であることにも、近くではありません。代わりに、状態をMVCオブジェクトに渡します。これにより、必要に応じて複数のレジストリ(または状態オブジェクト)を1回の実行で使用することができます。また、それを静的にしないと、テストするのがずっと良くなります。 – kingmaple

0

レジストリクラス以上がよりようにデータ・ホルダー・オブジェクトローダ等です。コントローラのレジストリにデータを追加して、ビューから取得することができます。 少しの例です。

Class Registry 
    { 
     protected $data = array(); 
     private $loadClasses; 

     public function getData($name){ 

      return isset($this->data[$name])?$this->data[$name]:null; 
     } 
     public function setData($name,$value) 
     { 
      $this->data[$name] = $value; 
     } 
     public function addData($name,$value) 
     { 
      $this->data[$name][] = $value; 
     } 


     public function &singletonLoad($class) 
     { 
      if(isset($this->loadClasses[$class])) 
      { 
       return $this->loadClasses[$class] ; 
      } 
      if(class_exists($class)) 
      { 
       return $this->loadClasses[$class] = new $class(); 
      }else 
      { 
       return false; 
      } 
     } 



    } 


    class AController extends Controller 
    { 
     public function indexAction() 
     { 
      $this->registsry->setData('name','John') ; 
     } 

    } 


    class AView extends View 
    { 
     public function getName() 
     { 
      return $this->registsry->getData('name') ; 
     } 

    } 
関連する問題