laravel - 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 App\Http\Controllers\Admin;
use App\Services\ProcessService;
...
CRUD::setValidation(DeclarationRequest::class);
$id = $this->crud->getCurrentEntry()->id;
$NbSuivis = $this->crud->getCurrentEntry()->NbSuivis;
ProcessService::validatePanel(2, $NbSuivis, $id);
问题
这会产生过多的重定向
解决方法
但是,当我将 switch 语句直接嵌入到各种 CRUD 控制器中时,一切都完美无缺。
如何将此逻辑保留在控制器之外和类定义中?
解决方案
问题在于嵌入式 switch 语句。需要以下中断语句:
<?php
namespace App\Services;
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;
}
}
}
}
推荐阅读
- java - PeerListListener 不工作?它表明没有使用 PeerListListener,但是在广播类中我使用了它??所以不知道哪里错了?
- javascript - 如果赛普拉斯是端到端测试框架,为什么它有集成测试文件夹?
- javascript - 变量和标识符之间的差异(如果有)
- fluentui-react - 这些奇怪的填充值在 Microsoft 的 Fluent-react 库中意味着什么?
- python - 在只有分钟和秒数据的数据框中生成小时和天 - Python
- excel - EXCEL:计数范围;但排除空格和特定字符串
- node.js - 如何在 angularJS 中读取 Linux 系统环境变量并在 Angular9 中的 require() 中传递该值
- ruby-on-rails - 似乎无法拉出这个对象的属性
- php - 如何垂直获取数组的最大值?
- javascript - 如何返回 discord.js 中的频道数?