0

我正在使用混凝土来渲染我的网站,它使用以下错误系统;

if (isset($error) && $error != '') {
    if ($error instanceof Exception) {
        $_error[] = $error->getMessage();
    } else if ($error instanceof ValidationErrorHelper) { 
        $_error = $error->getList();
    } else if (is_array($error)) {
        $_error = $error;
    } else if (is_string($error)) {
        $_error[] = $error;
    }
    ?>
    <?php  if ($format == 'block') { ?>
    <div class="alert-message error">
    <?php  foreach($_error as $e): ?>
        <?php  echo $e?><br/>
    <?php  endforeach; ?>
    </div>

    <?php  } else { ?>

    <ul class="ccm-error">
    <?php  foreach($_error as $e): ?>
        <li><?php  echo $e?></li>
    <?php  endforeach; ?>
    </ul>
    <?php  } ?>


<?php  } ?>

这用于检测系统中的错误或验证错误。

我的问题是正在显示错误 div 但没有错误,例如:

错误 DIV

我已经尝试转储变量,这是结果(在这种情况下):

Array    object(ValidationErrorHelper)#89 (1) { ["error:protected"]=> array(0) { } }

这是 ValidationErrorHelper 系统:

<?php
    defined('C5_EXECUTE') or die("Access Denied.");
    class ValidationErrorHelper {

        protected $error = array();


        public function reset() {
            $this->error = array();
        }


        public function add($e) {
            if ($e instanceof ValidationErrorHelper) {
                $this->error = array_merge($e->getList(), $this->error);            
            } else if (is_object($e) && ($e instanceof Exception)) {
                $this->error[] = $e->getMessage();
            } else {
                $this->error[] = $e;
            }
        }


        public function getList() {
            return $this->error;
        }


        public function has() {
            return (count($this->error) > 0);
        }


        public function output() {
            if ($this->has()) {
                print '<ul class="ccm-error">';
                foreach($this->getList() as $error) {
                    print '<li>' . $error . '</li>';
                }
                print '</ul>';
            }
        }
    }

?>

有什么办法可以去掉这个吗?或诊断它?

4

1 回答 1

1

有时错误对象已设置,但其中没有任何错误。如果您查看最上面的“if”语句,您会看到:

if (isset($error) && $error != '') {

所以发生的事情是 $error 变量是一个对象或数组,并且已由系统设置,但它没有任何错误。但是,只要设置了 $error 变量(或者不是空字符串),您的代码就会始终输出容器 <div> 。您需要做的是对 $_error 变量(在前十几行代码中创建的变量)添加额外的检查,以查看它是否为空。

尝试这个:

if (isset($error) && $error != '') {
    if ($error instanceof Exception) {
        $_error[] = $error->getMessage();
    } else if ($error instanceof ValidationErrorHelper) { 
        $_error = $error->getList();
    } else if (is_array($error)) {
        $_error = $error;
    } else if (is_string($error)) {
        $_error[] = $error;
    }

    if (!empty($_error)) {
        if ($format == 'block') { ?>
            <div class="alert-message error">
            <?php  foreach($_error as $e): ?>
                <?php  echo $e?><br/>
            <?php  endforeach; ?>
            </div>
        <?php  } else { ?>
            <ul class="ccm-error">
            <?php  foreach($_error as $e): ?>
                <li><?php  echo $e?></li>
            <?php  endforeach; ?>
            </ul>
        <?php }
    }
}
于 2012-06-27T14:18:05.150 回答