【问题标题】:Where does one place Models in a Laravel Package?Laravel 包中的模型放在哪里?
【发布时间】:2014-02-13 13:22:08
【问题描述】:

我目前正在关注Laravel Package 文档,该文档使用workbench 工具创建由controllerconfigviews 等文件夹组成的标准包树。基本上,您会在标准 Laravel 应用程序树中获得大多数文件夹。

但是,我有几个问题:

  • 为什么这里没有models 文件夹? (尽管testscommands 也是如此)
  • 我是否应该自己创建文件夹并将其添加到 composer.json 自动加载类映射?
  • src/<Namespace>/<PackageName> 中应该包含哪些类?我注意到这里会自动创建一个 ServiceProvider,但我可以想象大多数其他文件只存在于标准包目录中。

【问题讨论】:

    标签: laravel directory-structure


    【解决方案1】:

    Wockbench 只是一个用于创建其他工具的工具,它通过 CLI 触发。 Workbench 是一个非常抽象的概念。

    模型文件夹不存在只是因为您不需要每个新包中的模型。例如,如果您正在创建中间件包或您拥有过滤器包。

    每个新类都可以根据其用途和职责添加到包中。它可以通过不止一种方式完成。

    足以进入每个包的通用类是:

    Package Service Provider
    Facade
    Basic Class 
    

    但它不是一个黑匣子。以请求类为例 - 它在应用程序生命周期的早期绑定,因此不需要提供者。

    【讨论】:

    • 但同样你不需要在每个包中都有控制器。也没有意见。那么为什么那些存在而模型不存在呢?
    • 你是对的,这可能只是 Laravel 创建者个人选择的问题。工作台只是一个起点。当然,您将创建特定于您的包的类。或者链接到其他路径。我喜欢把工作台想象成创建其他东西的引导程序,所以它非常抽象和开放。
    • 我认为Taylor的总体思路是模型过于约束一个想法。控制器需要做控制器所做的事情,但大多数其他类在处理应用程序的业务逻辑方面更为抽象。可以肯定地说,任何扩展 Eloquent\Model 的东西都是非常具体的东西,因此为什么不设置一个文件夹,类似地,Laravel 的基本安装甚至提供了一个 models 目录,那么为什么不提供一个包呢?你得问问泰勒。但是,如果您阅读他的书,您会发现他告诉您在开始编码之前删除应用程序的 models 目录。