向Laravel中的控制器指示模型错误的最佳做法

时间:2019-05-28 13:40:53

标签: php laravel laravel-5

假设我在Model中有业务逻辑,例如在Student.php中(扩展了Model)。

在我的控制器中,我得到了该模型的一个实例:$myStudent = Student::find(1);

然后我要对其执行一些操作,例如:$myStudent->graduate();

但是我的业务逻辑说,由于某种条件,该操作无法执行。如何将这些信息传递给控制器​​?通过返回值?通过例外?其他方式?

  1. 返回值:如果我返回一个值(例如,0:成功,1:由于平均值低于70而出错,2:由于平均值低于50而出错),则部分业务逻辑将泄漏到控制器中,应该避免。

  2. 异常:如果请求成功,则代码的正常执行会继续,但是如果没有成功,我会抛出异常以及向用户显示的一些文本。

例外是要走的路吗?还有其他方法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我会说答案是“例外”,特别是如果您的业务逻辑开始变得更加复杂并且您开始具有多个功能嵌套层时。我们开始使用返回值,但最终在我们的代码中都有很多这样的行:

function someFunction(){
    [...]
    $result = $this->someInstance->doSomething();
    if (is_a($result, Error::class)) {
        return $result
    }
    [...]
} 

引发自定义Exception可以达到相同目的,但方式更简洁。

另外,如果函数doSomething在执行ok时返回integer,那么现在您将有两种类型的返回值,integer|Error也很不方便,如果函数{{1 }}如果执行正常,则不返回任何内容,现在您还必须注意,它现在可以返回两种类型,如果一切正常,则返回someFunction,否则返回null。您最终会遇到很多phpdoc,例如:Error@return int|Error等...我想这也表明这不是可行的方法。