首页 > 解决方案 > 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 控制器中时,一切都完美无缺。

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

标签: laravellaravel-backpack

解决方案


问题在于嵌入式 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;
                }
        }
    }
}

推荐阅读