MVC フレームワークでレジストリ クラスが必要な理由を誰か説明できますか?
ライブラリをロードすることですか?レジストリの作成の背後にある一般的な考え方は何ですか? レジストリはどのデータを処理する必要がありますか?
MVC フレームワークでレジストリ クラスが必要な理由を誰か説明できますか?
ライブラリをロードすることですか?レジストリの作成の背後にある一般的な考え方は何ですか? レジストリはどのデータを処理する必要がありますか?
http://www.phppatterns.com/docs/design/the_registryから直接
レジストリは、適切に管理された方法でデータをグローバルに保存するメカニズムを提供し、グローバルなメルトダウンの防止に役立ちます。
基本的に、レジストリは、アプリケーションのグローバル名前空間を汚染することなく、グローバル スコープで必要な変数/オブジェクトを格納する場所であることを意味します。MVC 自体とは何の関係もありませんが、多くの MVC フレームワークもレジストリ パターンを利用しています。
これにより、変数をある場所に保存し、別の場所で取得することができます。変数を取得するためにあらゆる種類の複雑なルーチンや魔法に頼る必要はありません。
Zend Framework を例にとると、Zend_Navigation オブジェクトを作成し、ブートストラップ時にZend_Registryに格納します。その後、コントローラーまたは他のクラスのいずれかでレジストリから簡単に取得できます。
レジストリ クラスは、データ ホルダー オブジェクト ローダーなどに似ています。コントローラのレジストリにデータを追加して、ビューから取得できます。ちょっとした例。
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') ;
}
}