Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储在注册表类php中的对象的范围_Php_Registry_Scope - Fatal编程技术网

存储在注册表类php中的对象的范围

存储在注册表类php中的对象的范围,php,registry,scope,Php,Registry,Scope,我有一个注册表,在那里我存储我的请求、验证器、数据库和路由器对象。因此,为了验证我的表单,我在MyForm类中使用了一个方法,其中检查了输入字段。当用户输入不正确时,将调用Registry::getInstance()->validator->setErrors($errors),以便将错误存储在注册表中,并在代码中的任何位置都可用 这就是为什么我在MyView.php中调用Registry::getInstance()->validator->getErrors() </head>

我有一个注册表,在那里我存储我的请求、验证器、数据库和路由器对象。因此,为了验证我的表单,我在MyForm类中使用了一个方法,其中检查了输入字段。当用户输入不正确时,将调用Registry::getInstance()->validator->setErrors($errors),以便将错误存储在注册表中,并在代码中的任何位置都可用

这就是为什么我在MyView.php中调用Registry::getInstance()->validator->getErrors()

</head><body>
<form accept-charset="utf-8" action="newuser.php" method="post">
<?php
    $errors = Registry::getInstance()->validator->getErrors();
    if($errors) {
        foreach($errors as $error) {
            echo '<p>'. $error . '</p>';
        }
    }
?>
}

我想,这与视图和控制器之间的通信有关。不知何故,它不起作用。我不知道在哪里包含视图,它只是html,不是生成的。这是我的注册管理员

class RegistrationController extends Controller {
public function execute()
{
    $form = new RegistrationForm;
    if($this->request->issetPost()) {
        $posts = $this->request->getPosts();
        if($form->isValid($posts)) {
            // [..save .]
        }
    }
}
} 我仍然对这种观点感到困惑。比如:

switch($page) {
case 'index':
    // ..
    break;
case 'news':
    // ..
    break;
case 'register_new_user':
    $newuser = new RegistrationController;
    $newuser->sign();
    break;

}调用视图的位置在哪里,告诉它操作发生了错误,因此注册表容器中有文本供视图显示?

虽然您的变量将在单个请求中保留,但后续请求仍将有一个未设置变量的原始
注册表对象。解决方案是将
注册表的一部分存储在会话中,并在第一次实例化时加载这些变量。比如:

....
if(null === self::$_instance) {
    if(!isset($_SESSION)) session_start();
    self::$_instance = isset($_SESSION['Registry']) ? $_SESSION['Registry'] : new self();
    $_SESSION['Registry'] = self::$_instance;
}
....
或者只是一部分:

....
if(null === self::$_instance) {
    if(!isset($_SESSION)) session_start();
    self::$_instance = new self();
    if(isset($_SESSION['RegistryPersistent'])) self::$_instance->_cache['persistent'] = &$_SESSION['RegistryPersistent'];
}
....

您需要显示注册表的代码。
....
if(null === self::$_instance) {
    if(!isset($_SESSION)) session_start();
    self::$_instance = new self();
    if(isset($_SESSION['RegistryPersistent'])) self::$_instance->_cache['persistent'] = &$_SESSION['RegistryPersistent'];
}
....