在我的包中,在对数据库执行查询之前,检查提供的某些参数是否有效:
//check
if(!$this->checkId($id)) //error
//do the query
$user = User::find($id);
在laravel包中处理此问题的最佳方法是什么?
抛出错误?如果是这样,哪种?应用程序中止吗?
答案 0 :(得分:1)
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\HttpException
和throw 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));