CRUD控制器调用的服务类



上下文

我定义了一个服务类validatePanel,它在实际呈现CRUD面板之前被调用。此类的目的是确保一系列不同的CRUD一个接一个地完成。DB中的一个简单计数器NbSuivis跟踪从一个面板到另一个面板的进程。该类只是重定向到序列中相应的面板。

这是类的定义:

public static function validatePanel(int $NbPanel, int $NbSuivis, int $id): void
// $NbPanel = Panel number to be validated
// $NbSuivis = Last panel number which has been saved
// $id = id of model
{
switch ($NbPanel) {
case 2: {
switch ($NbSuivis) {
case -1:
Alert::error('Exposition en suivi externe')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
case 0:
Alert::error('Veuillez compléter l'onglet d'identification')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
default:
break;
}
}
case 3:
switch ($NbSuivis) {
case -1:
Alert::error('Exposition en suivi externe')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
case 0:
Alert::error('Veuillez compléter l'onglet d'identification')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
case 1:
Alert::error('Veuillez compléter l'onglet nature de l'exposition')->flash();
redirect()->route('exposition/declaration.edit', ['id' => $id])->send();
break;
default:
break;
}
default:
break;
}
}

CRUD面板中的一个示例调用是:

namespace AppHttpControllersAdmin;
use AppServicesProcessService;   
...
CRUD::setValidation(DeclarationRequest::class);
$id = $this->crud->getCurrentEntry()->id;
$NbSuivis = $this->crud->getCurrentEntry()->NbSuivis;
ProcessService::validatePanel(2, $NbSuivis, $id);

问题

这会产生太多重定向

变通办法

然而,当我将switch语句直接嵌入到各种CRUD控制器中时,一切都可以完美地工作。

如何将此逻辑排除在控制器之外并保留在类定义中?

问题在于嵌入的switch语句。中断语句要求如下:

<?php
namespace AppServices;
class ProcessService
{
public static function validatePanel(int $NbPanel, int $NbSuivis, int $id): void
{

switch ($NbPanel) {
case 2: {
switch ($NbSuivis) {
case -1:
Alert::error('Exposition en suivi externe')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
case 0:
Alert::error('Veuillez compléter l'onglet d'identification')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
}
}
break;
case 3:
switch ($NbSuivis) {
case -1:
Alert::error('Exposition en suivi externe')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
case 0:
Alert::error('Veuillez compléter l'onglet d'identification')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
case 1:
Alert::error('Veuillez compléter l'onglet nature de l'exposition')->flash();
redirect()->route('exposition/declaration.edit', ['id' => $id])->send();
break;
}
break;
case 4:
switch ($NbSuivis) {
case -1:
Alert::error('Exposition en suivi externe')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
case 0:
Alert::error('Veuillez compléter l'onglet d'identification')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
case 1:
Alert::error('Veuillez compléter l'onglet nature de l'exposition')->flash();
redirect()->route('exposition/declaration.edit', ['id' => $id])->send();
break;
case 2:
Alert::add('error', 'Veuillez compléter l'onglet personne source')->flash();
redirect()->route('exposition/personne_source.edit', ['id' => $id])->send();
break;
}
break;
case 5:
switch ($NbSuivis) {
case -1:
Alert::error('Exposition en suivi externe')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
case 0:
Alert::error('Veuillez compléter l'onglet d'identification')->flash();
redirect()->route('exposition/identification.edit', ['id' => $id])->send();
break;
case 1:
Alert::error('Veuillez compléter l'onglet nature de l'exposition')->flash();
redirect()->route('exposition/declaration.edit', ['id' => $id])->send();
break;
case 2:
Alert::error('Veuillez compléter l'onglet personne source')->flash();
redirect()->route('exposition/personne_source.edit', ['id' => $id])->send();
break;
case 3:
Alert::error('Veuillez compléter l'onglet état sérologique')->flash();
redirect()->route('exposition/etat.edit', ['id' => $id])->send();
break;
}
}
}
}

最新更新