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 に答える