Skip to content

Commit

Permalink
feat: add exception handling for the FlashBagException from araise/co…
Browse files Browse the repository at this point in the history
…re-bundle
  • Loading branch information
Ruesa18 committed Jun 25, 2024
1 parent 61afb79 commit a53bb91
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 39 deletions.
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"symfony/ux-turbo": "^2.0",
"symfony/stimulus-bundle": "^2.0",
"symfony/webpack-encore-bundle": "^1.14|^2.1",
"araise/core-bundle": "^1.1",
"araise/core-bundle": "v1.1",
"araise/table-bundle": "^1.1",
"araise/search-bundle": "^3.1",
"knplabs/knp-menu-bundle": "^v3.2.0",
Expand Down
115 changes: 77 additions & 38 deletions src/Controller/CrudController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace araise\CrudBundle\Controller;

use araise\CoreBundle\Exception\FlashBagExecption;
use araise\CrudBundle\Content\RelationContent;
use araise\CrudBundle\Definition\DefinitionInterface;
use araise\CrudBundle\Enums\Page;
Expand Down Expand Up @@ -170,14 +171,22 @@ public function editAction(Request $request): Response

$form = $view->getEditForm();

$form->handleRequest($request);
try {
$form->handleRequest($request);

if ($form->isSubmitted()) {
$this->dispatchEvent(CrudEvent::PRE_VALIDATE_PREFIX, $entity);
if ($form->isValid()) {
return $this->formSubmittedAndValid($entity, $mode, Page::EDIT);
if ($form->isSubmitted()) {
$this->dispatchEvent(CrudEvent::PRE_VALIDATE_PREFIX, $entity);
if ($form->isValid()) {
return $this->formSubmittedAndValid($entity, $mode, Page::EDIT);
}
throw new FlashBagExecption('error', 'araise_crud.save_error');
}
$this->addFlash('error', 'araise_crud.save_error');
} catch (FlashBagExecption $e) {
$this->addFlash($e->getFlashType(), $e->getFlashMessage());
$this->container->get(LoggerInterface::class)->warning('Error while editing: '.$e->getMessage(), [
'entity' => get_class($entity),
'id' => $entity->getId(),
]);
}

$this->definition->buildBreadcrumbs($entity, Page::EDIT);
Expand Down Expand Up @@ -220,14 +229,22 @@ public function createAction(Request $request): Response

$form = $view->getCreateForm();

$form->handleRequest($request);
try {
$form->handleRequest($request);

if ($form->isSubmitted()) {
$this->dispatchEvent(CrudEvent::PRE_VALIDATE_PREFIX, $entity);
if ($form->isValid()) {
return $this->formSubmittedAndValid($entity, $mode, Page::CREATE);
if ($form->isSubmitted()) {
$this->dispatchEvent(CrudEvent::PRE_VALIDATE_PREFIX, $entity);
if ($form->isValid()) {
return $this->formSubmittedAndValid($entity, $mode, Page::CREATE);
}
throw new FlashBagExecption('error', 'araise_crud.save_error');
}
$this->addFlash('error', 'araise_crud.save_error');
} catch (FlashBagExecption $e) {
$this->addFlash($e->getFlashType(), $e->getFlashMessage());
$this->container->get(LoggerInterface::class)->warning('Error while creating: '.$e->getMessage(), [
'entity' => get_class($entity),
'id' => $entity->getId(),
]);
}

$this->definition->buildBreadcrumbs($entity, Page::CREATE);
Expand Down Expand Up @@ -258,11 +275,19 @@ public function deleteAction(Request $request): Response
try {
$this->entityManager->remove($entity);
$this->dispatchEvent(CrudEvent::PRE_DELETE_PREFIX, $entity);
$this->entityManager->flush();
try {
$this->entityManager->flush();
} catch (\Exception $e) {
$this->container->get(LoggerInterface::class)->warning('Error while deleting: '.$e->getMessage(), [
'entity' => get_class($entity),
'id' => $entity->getId(),
]);
throw new FlashBagExecption('error', 'araise_crud.delete_error');
}
$this->dispatchEvent(CrudEvent::POST_DELETE_PREFIX, $entity);
$this->addFlash('success', 'araise_crud.delete_success');
} catch (\Exception $e) {
$this->addFlash('error', 'araise_crud.delete_error');
} catch (FlashBagExecption $e) {
$this->addFlash($e->getFlashType(), $e->getFlashMessage());
$this->container->get(LoggerInterface::class)->warning('Error while deleting: '.$e->getMessage(), [
'entity' => get_class($entity),
'id' => $entity->getId(),
Expand All @@ -283,6 +308,7 @@ public function exportAction(Request $request, TableFactory $tableFactory, Table
],
]);

$entity = null;
if ($request->query->has('acronym') && $request->query->has('entityId')) {
try {
$entity = $this->getDefinition()->getQueryBuilder()
Expand All @@ -301,31 +327,44 @@ public function exportAction(Request $request, TableFactory $tableFactory, Table
}
}

$this->getDefinition()->configureExport($table);
$this->getDefinition()->configureFilters($table);
$this->getDefinition()->configureTableExporter($table);
if ($request->query->getInt('all', 0) === 1) {
$table->getExtension(PaginationExtension::class)?->setLimit(0);
}
$exporter = $table->getExporter($request->query->getString('exporter', 'table'));
if (!$exporter && count($table->getExporters()) > 0) {
$exporter = $table->getExporter(key($table->getExporters()));
}
if (!$exporter instanceof ExporterInterface) {
$this->addFlash('error', 'araise_crud.export_error');
throw new \RuntimeException('No Exporter found.');
}
$spreadsheet = $exporter->createSpreadsheet($table);
$writer = new Xlsx($spreadsheet);
$response = new StreamedResponse();
$response->setCallback(
function () use ($writer) {
$writer->save('php://output');
assert($entity !== null);

try {
$this->getDefinition()->configureExport($table);
$this->getDefinition()->configureFilters($table);
$this->getDefinition()->configureTableExporter($table);
if ($request->query->getInt('all', 0) === 1) {
$table->getExtension(PaginationExtension::class)?->setLimit(0);
}
);
$exporter = $table->getExporter($request->query->getString('exporter', 'table'));
if (!$exporter && count($table->getExporters()) > 0) {
$exporter = $table->getExporter(key($table->getExporters()));
}
if (!$exporter instanceof ExporterInterface) {
throw new FlashBagExecption('error', 'araise_crud.export_error', 'No Exporter found.');
}
$spreadsheet = $exporter->createSpreadsheet($table);
$writer = new Xlsx($spreadsheet);
$response = new StreamedResponse();
$response->setCallback(
function () use ($writer) {
$writer->save('php://output');
}
);

$response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
$response->headers->set('Content-Disposition', 'attachment; filename="'.$this->definition->getExportFilename().'"');
} catch (FlashBagExecption $e) {
$this->addFlash($e->getFlashType(), $e->getFlashMessage());
$this->container->get(LoggerInterface::class)->warning('Error while exporting: '.$e->getMessage(), [
'entity' => get_class($entity),
'id' => $entity->getId(),
]);

$response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
$response->headers->set('Content-Disposition', 'attachment; filename="'.$this->definition->getExportFilename().'"');
$response = $this->redirectToRoute($this->definition::getRoute(Page::SHOW), [
'id' => $entity->getId(),
]);
}

return $response;
}
Expand Down

0 comments on commit a53bb91

Please sign in to comment.