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