【问题标题】:Where to put logic instead of controller in Laravel 8在 Laravel 8 中放置逻辑而不是控制器的位置
【发布时间】:2021-09-28 16:57:45
【问题描述】:

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

找不到错误类“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();
    }
}

【问题讨论】:

  • 你需要导入 LottoService 类而不是 MyService

标签: php laravel laravel-8 service-provider


【解决方案1】:

首先:

在应用程序中创建一个名为 Services 的文件夹。

把你的服务放在那里。

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

将它与使用 App\Services\YourService 一起使用

在某个时候,运行 composer dump-autoload 来注册(如果它默认不工作)。

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

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

现在,Service 只是一个类。您只需实例化它,注入您需要的任何东西并完成工作。

【讨论】:

  • 另外 - 您的服务类应该与文件完全一致。纯粹的约定。
  • 非常感谢。 MyService 中缺少命名空间。应用程序现在可以很好地与我自己的服务一起使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
相关资源
最近更新 更多