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');
    }
}

但是如果我使用退出,我的页面不会继续显示。

4

3 回答 3

1

如果您的意思是要存储所有错误并继续处理,则可以将它们放入数组中。在处理之前定义一个数组,然后将每个错误添加到该数组。例如:

$arrErrors = array();

然后将您的退出语句替换为:

$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

正如您所说,exit()(and die()) 终止输出。这也是一种确保一旦出现问题就不会执行代码的懒惰方法,但有更好、更具可扩展性的方法。

一种是将任何错误提交到变量中,然后在执行任何以尚未出现错误为条件的代码之前检查它。然后,当我们输出时,我们将错误转发给用户。

//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 回答
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 回答