Laravel。在App :: make('foo') - > bar()上抛出Catch Exception

时间:2015-06-16 11:12:23

标签: php laravel laravel-4 try-catch

我有一个PriceController来更新我的物品的价格。在我的应用程序中,价格是一组或PriceSegments(或规则)。

所以我的PriceController @ update确实:

foreach (Input::get('price_segment_id') as $price_segment_id)
{
  try {
    \App::make('BF\Controllers\PriceSegmentController')->update($price_segment_id);
  } catch(BF\Exceptions\ValidationException $e) {
    $errors[] = $e->get_errors();
  }
}

我的PriceSegmentController @ update执行每个段的更新,如下所示:

$priceSegment = $this->repository->find($id);
if($priceSegment) {
  // UPDATE $priceSegment with Input, etc.

  $this->validator->validate($priceSegment->toArray());

  $priceSegment->save();
}

如果我在PriceSegmentController中执行try-catch,它会按预期工作,但我想执行try-catch和PriceController以收集所有错误并能够立即通知所有错误。

问题是没有捕获异常,我不知道为什么。我猜是与App :: make('foo')的行为有关,但我没想到它。

请帮忙吗?

由于

编辑:我的代码结构基于这个示例:http://www.sitepoint.com/data-validation-laravel-right-way/我正在使用我自己的Exceptions扩展Exception PHP类

1 个答案:

答案 0 :(得分:0)

我认为问题出现的原因是您正在使用laravel中的默认验证机制,如here所述。

您可以做的是在PriceSegmentController中捕获异常并且:

  • 使用自定义异常类型
  • 包装它们
  • 或使用您在该控制器中捕获的异常创建自定义异常

    并将自定义异常进一步提升到食物链中。

我希望它有所帮助。