У меня есть реестр, в котором я храню объекты запроса, валидатора, базы данных и маршрутизатора. Поэтому для проверки моих форм я использую метод в классе MyForm, где проверяются поля ввода. Если пользовательский ввод неправильный, вызывается Registry :: getInstance () -> validator-> setErrors ($ errors), так что ошибки сохраняются в реестре и становятся доступными в любом месте кода.
Вот почему я вызываю Registry :: getInstance () -> validator-> getErrors () в MyView.php
</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>';
}
}
?>
Несмотря на то, что $ MyForm-> isValid () заполняет ошибки здесь в Registry :: getInstance () -> validator-> setErrors ($ errors) правильно, что ясно видно с помощью var_dump (Registry :: getInstance ()), объект-валидатор имеет значение null при вызове в MyView.php.
Так что это все тот же объект. Но ошибки пропали. Почему?
А где лучше всего хранить тексты ошибок, когда проверка в MyForm.php ложна, чтобы я мог получить текст в MyView.php?
Edit:
это реестр
class Registry {
private static $_instance = null;
private $_cache = array();
public static function getInstance()
{
if(null === self::$_instance) {
self::$_instance = new self;
}
return self::$_instance;
}
public function __set($index, $value) {
if(!empty($index) && is_string($index) && !array_key_exists($index, $this->_cache)) {
$this->_cache[$index] = $value;
}
else {
// Errorhandling here ...
}
}
public function __get($name)
{
if(array_key_exists($name, $this->_cache) && !empty($this->_cache[$name])) {
return $this->_cache[$name];
}
else {
return null;
}
}
public function __unset($index)
{
unset($this->_cache[$index]);
}
private function __construct() {}
private function __clone() { }
}
Полагаю, это связано с обменом данными между View и Controller. Как-то не работает. Я не знаю, где включить представление, которое просто 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;
} Где находится место для вызова представления, скажите ему, что действие было выполнено с ошибками, так что в Registry-Container есть текст для отображения представления?