在 Laravel 8

问题描述

我想知道将应用程序的逻辑放在哪里而不是放在控制器内部。根据MVC模式,它不应该写在控制器中,但似乎没有什么好放入的。例如,模型用于与数据库通信,视图用于以不同的顺序显示给定的数据,但我有从给定的大范围内计数、计算和绘制正确的数据。我阅读了有关事件、侦听器和服务提供者的信息,但所有说明都说要将其他内容放入其中。我尝试手动创建一些服务目录类,但控制器似乎没有看到它,并且出现以下错误

未找到错误类“App\Services\MyService”

app\Services\MyServices.PHP

use App\Models\Lotto;
use App\Models\Duzylotek;

class MyService
{
    public function suggested() {
       //
    }
}

app\Http\Controllers\MyController.PHP

namespace App\Http\Controllers;

use App\Services\MyService;

class MyController extends Controller
{
    public function countnext()
    {
        (new MyService)->suggested();
    }
}

解决方法

首先:

在 app 中创建一个名为 Services 的文件夹。

将您的服务放在那里。

给它一个命名空间:App\Services

与 use App\Services\YourService 一起使用

在某个时候,运行 Composer dump-autoload 进行注册(如果它默认不起作用)。

然后:MVC(这是一个通用模式) - 具有 Fat Models / Slim Controllers 的原理。 在过去(Codeigniter) - 我们大多数人过去常常将逻辑放在模型中。该模型比现在的 Eloquent 模型轻一些。

当事情变得复杂时,我们将逻辑移到一个库中(在库文件夹中)。

现在,服务只是一个类。您只需实例化它,注入您需要的任何内容并完成工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...