gpt4 book ai didi

php - 创建 Laravel 存储库并绑定(bind)为服务提供者

转载 作者:行者123 更新时间:2023-12-03 16:49:53 26 4
gpt4 key购买 nike

我有 Symfony 和 Spring 背景,这是我使用 Laravel 的第一个项目,据我所知,Laravel 没有对存储库的内置支持。我找到了几个教程;其中一些尝试提供像 Spring 或 Symfony 这样的架构。

作为示例,此博客 suggests an folder structure像这样:

---- Repository
------ Eloquent
-------- UserRepository.php // extends BaseRepository
-------- BaseRepository.php // implements EloquentRepositoryInterface
------ UserRepositoryInterface.php
------ EloquentRepositoryInterface.php

这还不错。我感到困惑的是,作者建议将这些存储库绑定(bind)为服务提供者,并在 Controller 中作为提供者访问它们。
class RepositoryServiceProvider extends ServiceProvider 
{
public function register()
{
$this->app->bind(EloquentRepositoryInterface::class, BaseRepository::class);
$this->app->bind(UserRepositoryInterface::class, UserRepository::class);
}
}

然后我决定在 Github 中找到一个专注于创建 Eloquent 存储库的库,它直接使用 Controller 中的用户存储库:
class HomeController extends Controller
{
public function index(UserRepository $userRepository)
{
return $userRepository->get();
...

从架构的角度来看, 我们是否需要将存储库绑定(bind)为提供者 ? (假设 AWS 或 Elastic Search 可能会加入项目,并且存储库可能因单个模型而异)

最重要的是,为什么 Laravel 没有内置的存储库模式支持?
谢谢

最佳答案

why doesn't Laravel have a built-in repository pattern



因为对于如果使用它们应该如何使用它们还没有达成共识。

例如,我使用存储库作为 laravel 模型和需要实例化模型实例的 laravel Controller 之间的中介,我从不将它们注入(inject) Controller ,而是在需要时手动实例化它们。

do we need to bind repositories as providers ?



如上所述,没有共识所以 .

取决于您如何设计存储库,您可以手动实例化它们,将它们注入(inject) Controller 的实例化(在 __contruct(UserRepository $userRepository) 中),正如您可以在 laracast 从头开始​​的教程中看到的那样,或者将它们用作服务提供者。

关于php - 创建 Laravel 存储库并绑定(bind)为服务提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60295553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com