问题描述
我想知道将应用程序的逻辑放在哪里而不是放在控制器内部。根据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 模型轻一些。
当事情变得复杂时,我们将逻辑移到一个库中(在库文件夹中)。
现在,服务只是一个类。您只需实例化它,注入您需要的任何内容并完成工作。