我有一个结构项目如下:
/Controller
test.php
/Models
test_model.php
现在,当我执行请求时,模型test.php
会在相应的模型中查询请求,在本例中为test_model.php
。这没问题。现在我的问题是:我应该在test.php
类(控制器)或test_model.php
类中处理exceptino?
为了执行所有数据库对话,我创建了一个带有pdo的数据库层。 我设置了:
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
用于处理异常。一切顺利,但我怀疑。一个练习的例子:
<?php
include "test_model.php";
public function selectInformation()
{
try
{
$test = new Test_Model(); //just as example..
return $test->selectUserInfo(); // test_model
}catch(Exception $ex)
{
echo json_encode(array("success" => false, "message" => $ex->getMessage()));
exit();
}
}
...
这里是Test_Model
类:
<?php
class Test_Model extends PDO
{
public function __construct()
{
parent::__construct();
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
public function selectUserInfo()
{
//I removed most part of the code, essentially here an exception is fired by a non correct db table name
}
实际上我管理Test
课程中的所有例外情况,但这是一个好习惯吗?我只使用每个Model
来返回数据库中的结果。实际上Model
课程中没有。
答案 0 :(得分:3)
在模型或控制器中都没有。
必须在错误处理程序中处理错误异常。
不必单独“处理”对模型的每次调用,而是必须在一个地方处理所有错误。这称为错误处理程序。
不应该在JSON中发送错误消息或行号。此信息必须在本地记录,而不必在外部显示内部错误。只有一个普遍的借口才能显示出来。
应该有一个通过set_error_handler设置的错误处理程序,它必须负责处理错误。它应该记录生产中的错误,而只有一个普遍的借口发送到外面。
请注意,如果出现错误,请发送5xx系列
的相应HTTP状态代码非常重要答案 1 :(得分:0)
您应该将try catch块放在控制器中。