在Laravel中抛出错误

时间:2014-08-20 16:23:50

标签: laravel laravel-4

在我的包中,在对数据库执行查询之前,检查提供的某些参数是否有效:

//check
if(!$this->checkId($id)) //error

//do the query
$user = User::find($id);

在laravel包中处理此问题的最佳方法是什么?

抛出错误?如果是这样,哪种?应用程序中止吗?

2 个答案:

答案 0 :(得分:1)

使用findOrFail()

Laravel为这种情况提供了一种非常好的方法,称为findOrFail()

你可以做的是使用它,然后捕捉异常。

try {
    $user = User::findOrFail($queryParam);
} catch(ModelNotFoundException $e) {
    // Do things that should happen here if your query parameter does not exist.
}

如果您不想在此处捕获它,可以为此异常设置一个侦听器。只要它被自动加载,您就可以将它放在任何地方。

use Illuminate\Database\Eloquent\ModelNotFoundException;

App::error(function(ModelNotFoundException $e)
{
    return Response::make('Not Found', 404);
});

抛出异常

如果查询参数不可用,您只想抛出错误,可以抛出此处找到的任何异常... https://github.com/symfony/symfony/tree/master/src/Symfony/Component/HttpKernel/Exception

如果不适合您,您可以创建自己的,只需展开Symfony\Component\HttpKernel\Exception\HttpExceptionthrow new YourCustomException($statusCode, $message);。只需按照他们在其他异常类中所做的操作,这应该相当容易。

然后,您可以修改“异常监听器”以捕获YourCustomException

以下是我发现的教程...... http://fideloper.com/laravel4-error-handling

答案 1 :(得分:0)

我会使用事件监听器来获得最大的控制权。

events.php目录中创建app,并将其添加到app/start/global.php 或者,您可以在包裹中的任何地方注册。

创建一个监听器:

Event::listen('paramCheck.noId', function($id)
{

    // do some logic, log something, return something, throw an error...

});

然后从您需要的时间开始事件:

if(!$this->checkId($id))
    $returnFromEvent = Event::fire('paramCheck.noId', array($id));