0

ビューでコントローラーアクションを実行中の表示エラーに関するベストプラクティスはありますか? つまり、「データベースにログインが見つかりませんでした」、「入力値の形式が正しくありません」、または「フィールドに値が必要です」というエラーをどのように表示しますか?

エラーが発生した配列などはありますか? 今私のコードは次のようになります:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $siteName = isset($_POST['SiteName']) ? trim($_POST['SiteName']) : null;
    $siteUrl = isset($_POST['SiteUrl']) ? trim($_POST['SiteUrl']) : null;

    if(IsNullOrEmptyString($siteName) || IsNullOrEmptyString($siteUrl)) {
        exit('Site name or site url could not be empty');
    } elseif (!preg_match('/^http\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?$/', $siteUrl)){
        exit('Site url has wrong format');
    }

    $filters = array('SiteName' => $siteName, 'SiteUrl' => $siteUrl);
    if($sitesRepository->select($filters)) {
        exit('Site is already exist');
    }
}

しかし、exit を使用すると、ページが表示されなくなります。

4

3 に答える 3

1

すべてのエラーを保存して処理を続けたい場合は、それらを配列に入れることができます。プロセスを定義する前に配列を定義し、各エラーをその配列に追加します。例えば:

$arrErrors = array();

次に、exit ステートメントを次のように置き換えます。

$arrErrors[] = 'The error text goes here...';

処理が完了したら、エラーをチェックして出力できます。

for ($i=0; $i<count($arrErrors); $i++)
{
    echo $arrErrors[$i].'<br />'; 
}

また

echo implode('<br />', $arrErrors);
于 2012-06-30T11:02:53.843 に答える
0

システムで何が問題になっているのかを実際に示すことは決してベストプラクティスではありません。

//let's say some error just occurred
$error = 'some error!';

//some code that should happen only if there's no error yet
if (!isset($error)) doSomething();

//then, when we get to output, display any error
if (isset($error)) header("Location: error.html");

コードに問題が発生した場合は、エラーを表示するのではなく、ユーザーをカスタム エラー ページにリダイレクトし、ユーザーが問題をあまり気にしないようなメッセージを表示します。彼のレコードがデータベースに見つからなかったことを彼に示すのではなく、それが彼を怖がらせる可能性があります。

彼をエラーページにリダイレクトし、何が問題なのかを知っており、チームが現在修正に取り組んでいることを示してください.

(ユーモラスなエラー メッセージを表示すると解決する場合があります)

于 2012-06-30T11:09:54.433 に答える
0

あなたが言うように、exit()(そしてdie())出力を終了します。これは、問題が発生したときにコードが実行されないようにする怠惰な方法でもありますが、より優れた、よりスケーラブルなアプローチがあります。

1 つは、エラーを変数にコミットし、エラーがまだ発生していないことを条件とするコードを実行する前にそれをチェックすることです。次に、出力に到達したら、エラーをユーザーに伝えます。

//let's say some error just occurred
$error = 'some error!';

//some code that should happen only if there's no error yet
if (!isset($error)) doSomething();

//then, when we get to output, display any error
if (isset($error)) echo "<h3 class='error'>".$error."</h3>";

編集 - sk00V が正しく言うように、複数のエラーをログに記録して、それらを配列にプッシュすることもできます。私の例では、最初のエラーで終了することを前提としています。これは、コードが示唆するものです。

于 2012-06-30T11:04:21.840 に答える