Laravel. Catch Exception thrown on App::make('foo')->bar()

241 Views Asked by At

I have a PriceController that updates the prices of my items. In my app, a Price is a set or PriceSegments (or Rules).

So my PriceController@update does:

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();
  }
}

And my PriceSegmentController@update does the update of each segment as follow:

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

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

  $priceSegment->save();
}

If I do the try-catch in PriceSegmentController it works as expected, but I would like to do the try-catch un PriceController in order to collect all the error and being able to inform them all at once.

The problem is the Exception is not catched and I do not know why. I guess is something related with the behaviour of App::make('foo') but I did not figure it out.

Some help please?

Thanks

EDIT: The structure of my code is based on this example: http://www.sitepoint.com/data-validation-laravel-right-way/ and I am using my own Exceptions extending the Exception PHP class

1

There are 1 best solutions below

1
On

I think the problem occurs because you are using the default validation mechanism in laravel as described here.

What you can do instead is to catch exceptions in PriceSegmentController and:

  • either wrap them with a custom exception type

  • or create a custom exception using exceptions you catch in that controller

    and throw your custom exception further up in the food chain.

I hope it helps.