有人可以解释为什么MVC框架中需要注册表类吗?
是否要加载库?什么是创建注册表背后的一般想法?注册管理机构应该处理哪些数据?
答案 0 :(得分:2)
直接来自http://www.phppatterns.com/docs/design/the_registry
The Registry提供了一种以良好管理的方式在全球范围内存储数据的机制,有助于防止全球崩溃。
基本上,它意味着注册表是一个存储您在全局范围内所需的变量/对象的地方,而不会污染应用程序的全局命名空间。它与MVC本身无关,但许多MVC框架也使用了注册表模式。
它允许您在一个地方存储变量,并在另一个地方检索,而无需借助各种复杂的例程或魔法来检索变量。
以Zend Framework为例,您可以创建一个Zend_Navigation对象并将其存储在引导程序的Zend_Registry中。然后,您可以轻松地从您的某个控制器或其他类中的注册表中检索它。
答案 1 :(得分:0)
Registry Class更像是数据持有者对象加载器等等。您可以将数据添加到控制器中的注册表并从视图中获取它。 一个小例子。
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') ;
}
}