Привет участники!
Взял за основу Laravel Boilerplate, пишу по образу и подобию, но возникли вопросы.
Сейчас есть такой код сохранения записи:
В репозитории:
public function create(array $data) : Document
{
return DB::transaction(function () use ($data) {
$document = $this->model::create([
'number' => $data['number'],
// ....
]);
if ($document) {
return $document;
}
throw new GeneralException(__('exceptions.backend.common.create_error'));
});
}
В контроллере:
public function store(Request $request)
{
$this->documentRepository->create($request->only(
'number',
// ....
));
return redirect()->route('admin.docflow.document.list')
->withFlashSuccess(__('alerts.backend.common.created'));
}
Сейчас сэмулировал ошибку БД, выбросилось и не поймалось ни одним слоем исключение Illuminate\Database\QueryException. Я думал, фреймворк как-то из коробки умеет такие ситуации обрабатывать.
Вопросы:
1. В каком слое принято обрабатывать такие ситуации?
2. Каким кэтчем отлавливать бОльшую часть исключений? Стоит ли использовать \Exception?
3. Стоит ли делать так:
public function create(array $data) : Document
{
try {
return DB::transaction(function () use ($data) {
$document = $this->model::create([
'number' => $data['number'],
// ....
]);
if ($document) {
return $document;
}
throw new GeneralException(__('exceptions.backend.common.create_error'));
});
} catch (\Exception $e) {
throw new GeneralException($e->getMessage());
}
}