在视图上执行控制器操作期间是否有关于显示错误的最佳做法?我的意思是,当“在数据库中找不到登录”或“输入值格式不正确”或“字段需要值”时,如何显示错误?
是否有错误或其他任何数组?现在我的代码看起来像:
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');
}
}
但如果我使用退出,我的页面不会继续显示。
答案 0 :(得分:1)
如果您的意思是要存储所有错误并继续处理,可以将它们放入数组中。在您处理定义数组然后将每个错误添加到该数组之前。例如:
$arrErrors = array();
然后将退出语句替换为:
$arrErrors[] = 'The error text goes here...';
完成处理后,您可以检查并输出任何错误:
for ($i=0; $i<count($arrErrors); $i++)
{
echo $arrErrors[$i].'<br />';
}
或
echo implode('<br />', $arrErrors);
答案 1 :(得分:0)
如您所说,exit()
(和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正确地说的那样,您可能还想记录多个错误,将其推入阵列。我的例子假设你想要在第一个错误时退出,这是你的代码所建议的。
答案 2 :(得分: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");
如果代码出现任何问题,而不是显示错误,只需将用户重定向到自定义错误页面,并显示一些消息,不会让用户担心问题。而不是向他展示他的记录在数据库中找不到,这可能会让他感到害怕。
只需将他重定向到错误页面,然后告诉他,你知道出了什么问题,你的团队正在努力解决这个问题。
(显示一些幽默的错误消息可能会帮助你)